如果变量总和大于1,则将值转为NA

问题描述 投票:-2回答:1

我是R的新手所以如果我没有使用正确的词汇,请原谅我。我目前正在处理一个数据集,其中有一些虚拟变量。问题是对于某些行,多于1个虚拟变量的值为1.如果是这种情况,我想将下一个虚拟变量设置为NA。

我想尝试一些但我不知道如何开始。如果有人可以帮助我,那将是惊人的。

提前致谢!

目前的数据

df <- structure(list(Dum_1 = c(1L, NA, NA), Dum_2 = c(NA, 1L, NA), 
    Dum_3 = c(NA, 1L, 1L)), row.names = c(NA, -3L), class = c("tbl_df", 
"tbl", "data.frame"))

# A tibble: 3 x 3
  Dum_1 Dum_2 Dum_3
  <int> <int> <int>
1     1    NA    NA
2    NA     1     1
3    NA    NA     1

预期产出

# A tibble: 3 x 3
  Dum_1 Dum_2 Dum_3
  <int> <int> <int>
1     1    NA    NA
2    NA     1    NA
3    NA    NA     1
r na dummy-variable
1个回答
0
投票

假设您的数据作为数据帧存储在名为df的对象中,这应该有效:

df2 <- apply(df,1,function(x) {
  first_one <- min(which(x == 1))
  x[1:length(x)] <- NA
  x[first_one] <- 1
  print(x)
})

df2

这假设df看起来像这样:

df <- tibble::tribble(
  ~`Dum 1`,     ~`Dum 2`,    ~`Dum 3`,
  1,        NA,        NA,
  NA,       1,         1,
  NA,      NA,        1
) %>% as.data.frame()

df

   Dum 1 Dum 2 Dum 3
1     1    NA    NA
2    NA     1     1
3    NA    NA     1
© www.soinside.com 2019 - 2024. All rights reserved.