Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据组值填写NA_R_Data.table - Fatal编程技术网

R 根据组值填写NA

R 根据组值填写NA,r,data.table,R,Data.table,不是data.table特定的,虽然答案类似,但下面(对我的问题)的答案使用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

不是data.table特定的,虽然答案类似,但下面(对我的问题)的答案使用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

非常感谢。

假设“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值相同<代码>平均值(测试$A,测试$id,FUN=函数(x)x[!is.na(x)])和
平均值(测试$B,测试$id,FUN=函数(x)x[!is.na(x)])
test[na.omit(test), names(test)[-1] :=  mget(paste0("i.", names(test)[-1])) , on = .(id)]