R 根据组值填写NA
不是data.table特定的,虽然答案类似,但下面(对我的问题)的答案使用data.table更优雅。我怎样才能去掉重复的标签?多谢各位 这绝对不是复制品 我有一个数据表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
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)]