replace NA value with the group value不是特定于data.table的,虽然答案类似,但下面(我的问题)的答案使用data.table更优雅。我如何获得重复的标签?谢谢你
这绝对不是Replacing NAs with latest non-NA value
的重复我有一个data.table,如
library(data.table)
test <- data.table(id=c(1,1,1,2,2,2,3,3,3), A=c("Val1","Val1", NA, "Val2", NA, NA, NA, NA, "Val3"), B=c(1,NA,NA, 2,2,NA,NA,NA,3))
test
id A B
1: 1 Val1 1
2: 1 Val1 NA
3: 1 NA NA
4: 2 Val2 2
5: 2 NA 2
6: 2 NA NA
7: 3 NA NA
8: 3 NA NA
9: 3 Val3 3
由“id”定义的组。
我想用其组中的值填充NA值。你看到了解决方案吗?
结果应如下所示(关于字符和数字特征):
id A B
1: 1 Val1 1
2: 1 Val1 1
3: 1 Val1 1
4: 2 Val2 2
5: 2 Val2 2
6: 2 Val2 2
7: 3 Val3 3
8: 3 Val3 3
9: 3 Val3 3
非常感谢你。
答案 0 :(得分:2)
假设'A'和'B'列的每个'id'只有唯一的元素,在按'id'分组后,循环遍历Data.table的子集(.SD
)并得到第一个非NA元素并将其分配(:=
)到列
test[, (2:3) := lapply(.SD, function(x) x[!is.na(x)][1]) , id]
或者在删除NA行后对数据集进行连接
test[na.omit(test), names(test)[-1] := mget(paste0("i.", names(test)[-1])) , on = .(id)]