首页 > 解决方案 > 汇总/总和和 N/A 值

问题描述

我对聚合或 N/A 处理总和的方式有疑问。

我想要下表中每个 area.code 的总和

test <- read.table(text = "
area.code   A    B   C   D
1          0  NA 0.00  NA  NA
2          1 0.0 3.10 9.6 0.0
3          1 0.0 3.20 6.0 0.0
4          2 0.0 6.10 5.0 0.0
5          2 0.0 6.50 8.0 0.0
6          2 0.0 6.90 4.0 3.1
7          3 0.0 6.70 3.0 3.2
8          3 0.0 6.80 3.1 6.1
9          3 0.0 0.35 3.2 6.5
10         3 0.0 0.67 6.1 6.9
11         4 0.0 0.25 6.5 6.7
12         5 0.0 0.68 6.9 6.8
13         6 0.0 0.95 6.7 0.0
14         7 1.2   NA 6.8 0.0
")

所以,看起来很简单:

aggregate(.~area.code, test, sum)



area.code A     B    C    D
1         1 0  6.30 15.6  0.0
2         2 0 19.50 17.0  3.1
3         3 0 14.52 15.4 22.7
4         4 0  0.25  6.5  6.7
5         5 0  0.68  6.9  6.8
6         6 0  0.95  6.7  0.0

显然不是那么简单,因为在 aggregate() 命令中完全省略了区号 7。

但是,我希望 N/As 被完全忽略或计算为零值,哪个 na= 命令提供了该选项?

如果我只想要总和,则将所有 N/A 替换为 0 是一种选择……但是平均值确实有问题(因为它不再能够区分 0 和 N/A)

标签: r

解决方案


如果您愿意考虑外部包(data.table):

setDT(test)
test[, lapply(.SD, sum), area.code]
   area.code   A     B    C    D
1:         0  NA  0.00   NA   NA
2:         1 0.0  6.30 15.6  0.0
3:         2 0.0 19.50 17.0  3.1
4:         3 0.0 14.52 15.4 22.7
5:         4 0.0  0.25  6.5  6.7
6:         5 0.0  0.68  6.9  6.8
7:         6 0.0  0.95  6.7  0.0
8:         7 1.2    NA  6.8  0.0

推荐阅读