繁体   English   中英

根据 data.table 中的另一个行值替换行值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM