5

假设我有

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

这是我想要的abc不适用。这似乎很容易通过做来解决

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

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

4

1 回答 1

7

扩展我的评论:

许多base功能让您决定如何治疗NA。例如,sum有论据na.rm

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

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

az[,lapply(.SD,function(x) sum(na.omit(x)))]
于 2013-05-29T18:59:08.083 回答