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
谢谢!
答案 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