[英]replace row values based on another row value in a data.table
我有一个微不足道的问题,尽管我正在努力寻找一个简单的答案。 我有一个看起来像这样的数据表:
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]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.