【发布时间】:2013-05-29 18:46:26
【问题描述】:
假设我有
az<-data.table(a=1:6,b=6:1,c=4)
az[b==4,c:=NA]
az
a b c
1: 1 6 4
2: 2 5 4
3: 3 4 NA
4: 4 3 4
5: 5 2 4
6: 6 1 4
我可以得到所有列的总和
az[,lapply(.SD,sum)]
a b c
1: 21 21 NA
这是我想要的 a 和 b 但 c 是 NA。这似乎很容易通过这样做来解决
az[,lapply(na.omit(.SD),sum)]
a b c
1: 18 17 20
这是我想要的c,但我不想省略a 和b 的值,其中c 是NA。这是我真实数据中的一个人为示例,其中可能有 1000 多列随机 NA。有没有办法让na.omit 或其他东西在每列而不是在整个表上执行而不依赖于循环遍历每一列作为向量?
【问题讨论】:
-
az[,lapply(.SD,sum,na.rm=TRUE)]工作吗? -
@BlueMagister 我没想到。是的,它确实适用于
sum,尽管它不适用于没有内置该参数的函数。除非有更好的方法,否则我可以编写自己的函数,这些函数只是我想要的函数的 na.omit比遍历列向量更好。 -
@DeanMacGregor 在这种情况下使用 lambda,例如
az[,lapply(.SD, function(x) length(na.omit(x)))] -
@MatthewPlourde 谢谢,我不知道你可以像这样即时制作函数。
标签: r data.table