根据R中的匹配ID替换二分变量的值

时间:2018-07-31 14:46:06

标签: r

test <- data.frame('id'= rep(1:3,3), 'Dich'= c(NA, NA, NA, 1, NA, NA, 1, 1, NA))
test
  id Dich
1  1   NA
2  2   NA
3  3   NA
4  1    1
5  2   NA
6  3   NA
7  1    1
8  2    1
9  3   NA

如果匹配的ID在其他任何行中的值为1,我想用1替换缺失的值。

理想的结果:

     id Dich
1  1    1
2  2    1
3  3   NA
4  1    1
5  2    1
6  3   NA
7  1    1
8  2    1
9  3   NA

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用any

transform(test, Dich2 = ave(x = Dich, id, FUN = any))
#  id Dich Dich2
#1  1   NA     1
#2  2   NA     1
#3  3   NA    NA
#4  1    1     1
#5  2   NA     1
#6  3   NA    NA
#7  1    1     1
#8  2    1     1
#9  3   NA    NA

之所以可行,是因为any(c(1, NA))返回TRUE(和警告),而ave返回数字矢量。

答案 1 :(得分:0)

data.table解决方案:

data.table::setDT(test)[,Dich:=ifelse(is.na(Dich)&any(Dich%in%1),1,Dich),by="id"]

#   id Dich
#1:  1    1
#2:  2    1
#3:  3   NA
#4:  1    1
#5:  2    1
#6:  3   NA
#7:  1    1
#8:  2    1
#9:  3   NA