汇总包含NA值的多个变量

时间:2017-10-14 23:36:47

标签: r aggregate

我有以下数据框:

x <- read.table(text = "  id1 id2 var1 var2
1   a   x    1    NA
2   a   x    2    4
3   a   y    2    5
4   a   y    4    9
5   b   x    1    7
6   b   y    4    4
7   b   x    3    9
8   b   y    2    8", header = TRUE)

在第一行中包含一个NA值。我使用aggregate()函数在一个调用中对几个变量应用了几个函数:

aggregate(cbind(var1, var2) ~ id1 + id2, data = x,
          FUN = function(x) c(mn = mean(x), n = length(x)))

这导致以下输出:

  id1 id2 var1.mn var1.n var2.mn var2.n
1   a   x       2      1       4      1
2   b   x       2      2       8      2
3   a   y       3      2       7      2
4   b   y       3      2       6      2

不幸的是,对于每个变量(也是var1 ),将删除var2中包含NA值的完整行。

在一次调用中对多个变量使用aggregate()函数而不会丢失包含NA值的所有行的任何解决方案?

我的首选输出应如下所示:

  id1 id2 var1.mn var1.n var2.mn var2.n
1   a   x     1.5      2       4      1
2   b   x     2.0      2       8      2
3   a   y     3.0      2       7      2
4   b   y     3.0      2       6      2

1 个答案:

答案 0 :(得分:1)

aggregate(x[c("var1", "var2")], x[c("id1", "id2")],
      function(x) c(mn = mean(x, na.rm = TRUE), n = sum(!is.na(x))))
#  id1 id2 var1.mn var1.n var2.mn var2.n
#1   a   x     1.5    2.0       4      1
#2   b   x     2.0    2.0       8      2
#3   a   y     3.0    2.0       7      2
#4   b   y     3.0    2.0       6      2