我有一个微不足道的问题,尽管我正在努力寻找一个简单的答案。我有一个看起来像这样的数据表:
dt <- data.table(id= c(A,A,A,A,B,B,B,C,C,C), time=c(1,2,3,1,2,3,1,2,3), score = c(10,15,13,25,NA,NA,18,29,19))
dt
# id time score
# 1: A 1 NA
# 2: A 2 10
# 3: A 3 15
# 4: A 4 13
# 5: B 1 NA
# 6: B 2 25
# 7: B 3 NA
# 8: B 4 NA
# 9: C 1 18
# 10: C 2 29
# 11: C 3 NA
# 12: C 4 19
我想用“A”的值替换我的组“B”的缺失值。
最终的数据集应该是这样的
final
# id time score
# 1: A 1 NA
# 2: A 2 10
# 3: A 3 15
# 4: A 4 13
# 5: B 1 NA
# 6: B 2 25
# 7: B 3 15
# 8: B 4 13
# 9: C 1 18
# 10: C 2 29
# 11: C 3 NA
# 12: C 4 19
换句话说,以 B 是 NA 为条件,我想替换“A”的分数。请注意,“C”仍然是 NA。我正在努力寻找一种使用 data.table 的干净方法来做到这一点。但是,如果使用其他方法更简单,它仍然可以。
非常感谢你的帮助
这是我们获取NA
“分数”行的索引并且“id”为“B”的一种选择,使用它来将 NA 替换为来自“A”的相应“分数”值
library(data.table)
i1 <- setDT(dt)[id == 'B', which(is.na(score))]
dt[, score:= replace(score, id == 'B' & is.na(score), score[which(id == 'A')[i1]])]
或类似的选项 dplyr
library(dplyr)
dt %>%
mutate(score = replace(score, id == "B" & is.na(score),
score[which(id == "A")[i1]))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句