根据组值填写NA [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据组值填写NA [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

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

非常感谢。

答案

假设'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)]

以上是关于根据组值填写NA [重复]的主要内容,如果未能解决你的问题,请参考以下文章

根据重复组值获取数据

在R中迭代地用先前的值填充NA行[重复]

根据R中的2列删除重复的行

熊猫不会在原地填写na()

错误代码:1060 列名重复“NA”

12_关于flask中的宏