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

时间:2019-04-09 15:31:31

标签: r na dummy-variable

我在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

1 个答案:

答案 0 :(得分: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