假设我有
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
或其他东西在每个列上而不是在整个表上进行操作而不依赖于将每列作为向量循环?
答案 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)))]