如何使用data.table获取na.omit,只省略每列中的NA

时间:2013-05-29 18:46:26

标签: r data.table

假设我有

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

这就是我想要的ab,但c是NA。这似乎很容易通过

来解决
az[,lapply(na.omit(.SD),sum)]
    a  b  c
1: 18 17 20

这就是我想要的c,但我不想省略ab c NA的值。这是一个人为的例子,在我的真实数据中,可能有1000多个列,其中包含随机的NA。有没有办法让na.omit或其他东西在每个列上而不是在整个表上进行操作而不依赖于将每列作为向量循环?

1 个答案:

答案 0 :(得分:7)

扩展我的评论:

许多base函数可让您决定如何对待NA。例如,sum的参数为na.rm

az[,lapply(.SD,sum,na.rm=TRUE)]

通常,您还可以单独在每个向量上使用函数na.omit

az[,lapply(.SD,function(x) sum(na.omit(x)))]