在R中按NA汇总

wil*_*nm2 5 aggregate r na

有没有人知道如何通过NA在R中聚合

如果你看下面的例子

a <- matrix(1,5,2)
a[1:2,2] <- NA
a[3:5,2] <- 2
aggregate(a[,1], by=list(a[,2]), sum)
Run Code Online (Sandbox Code Playgroud)

输出是:

Group.1 x
2       3
Run Code Online (Sandbox Code Playgroud)

但有没有办法让输出在输出中包含NA,如下所示:

Group.1 x
2       3
NA      2
Run Code Online (Sandbox Code Playgroud)

谢谢

Ric*_*ven 8

而不是aggregate(),你可能想要考虑rowsum().它实际上是为矩阵上的这种精确操作而设计的,并且已知比它快得多aggregate().我们可以添加NA到的因子水平a[, 2]addNA().这将确保NA显示为分组变量.

rowsum(a[, 1], addNA(a[, 2]))
#      [,1]
# 2       3
# <NA>    2
Run Code Online (Sandbox Code Playgroud)

如果您仍想使用aggregate(),也可以合并addNA().

aggregate(a[, 1], list(Group = addNA(a[, 2])), sum)
#   Group x
# 1     2 3
# 2  <NA> 2
Run Code Online (Sandbox Code Playgroud)

还有一个data.table选项-

library(data.table)
as.data.table(a)[, .(x = sum(V1)), by = .(Group = V2)]
#    Group x
# 1:    NA 2
# 2:     2 3
Run Code Online (Sandbox Code Playgroud)