aggregate + mean返回错误的结果

时间:2015-07-14 22:50:58

标签: r aggregate mean

使用R,我即将用aggregate(..., mean)计算分组方法。然而,平均回报是错误的。

testdata <-read.table(text="
a  b    c   d   year
2   10  1   NA  1998
1   7   NA  NA  1998
4   6   NA  NA  1998
2   2   NA  NA  1998
4   3   2   1   1998
2   6   NA  NA  1998
3   NA  NA  NA  1998
2   7   NA  3   1998
1   8   NA  4   1998
2   7   2   5   1998
1   NA  NA  4   1998
2   5   NA  6   1998
2   4   NA  NA  1998
3   11  2   7   1998
1   18  4   10  1998
3   12  7   5   1998
2   17  NA  NA  1998
2   11  4   5   1998
1   3   1   1   1998
3   5   1   3   1998
",header=TRUE,sep="")
aggregate(. ~ year, testdata,
          function(x) c(mean = round(mean(x, na.rm=TRUE), 2)))
colMeans(subset(testdata, year=="1998", select=d), na.rm=TRUE)

aggregate表示群组d的{​​{1}}平均值为4.62,但为4.5。

仅将数据减少到一列,1998使其正确:

aggregate

我的aggregate(. ~ year, test[4:5], function(x) c(mean = round(mean(x, na.rm=TRUE), 2))) + aggregate()功能出了什么问题?

1 个答案:

答案 0 :(得分:5)

聚合在将任何列传递给均值函数之前,在任何列中取出包含NA的行。尝试在没有na.rm=TRUE的情况下运行您的聚合调用 - 它仍然有效。

要解决此问题,您需要将聚合中的默认na.action更改为na.pass:

aggregate(. ~ year, testdata,
          function(x) c(mean = round(mean(x, na.rm=TRUE), 2)), na.action = na.pass)


  year    a    b    c   d
1 1998 2.15 7.89 2.67 4.5