按组计算平均值,不包括NA值

时间:2016-11-04 15:01:08

标签: r aggregate

我正在努力寻找能够通过取均值并忽略NA值来聚合我的数据框的东西,但最终结果仍会显示缺失值。 数据表看起来像这样

Guar1   Bucket2 1   2   3   4   Total   Month
10  -10 NA  NA  NA  NA  0   201110
10  -0.2    0   9.87    8.42    0   18.29   201110
10  0   0.81    7.49    3.32    5.92    17.54   201110
10  0.4 0   0   NA  0   0   201110
10  999 0.73    7.57    4.61    0.77    13.68   201110
20  -10 NA  NA  NA  NA  0   201110
20  -0.2    NA  NA  100 NA  100 201110
20  0   NA  0   0   0   0   201110
20  0.4 1.39    3.13    14.04   2.98    21.54   201110
20  999 1.38    3.11    17.08   2.97    24.54   201110
999 999 1.06    5.44    8.61    1.52    16.63   201110
10  -10 NA  NA  NA  NA  0   201111
10  -0.2    0   0   8.54    0   8.54    201111
10  0   1.87    6.12    16.6    0   24.59   201111
10  0.4 0   0   0   1.47    1.47    201111
10  999 1.68    5.82    13.15   1.67    22.32   201111
20  -10 NA  NA  NA  NA  0   201111
20  -0.2    NA  0   NA  NA  0   201111
20  0   NA  NA  0   0   0   201111
20  0.4 2.29    5.38    14.91   14.18   36.76   201111
20  999 2.29    5.35    13.09   14.1    34.83   201111

决赛桌

Guar1   Bucket2 1   2   3   4   Total
10  -10 NA  NA  NA  NA  0
10  -0.2    0   4.935   8.48    0   13.415
10  0   1.34    6.805   9.96    2.96    21.065
10  0.4 0   0   0   0.735   0.735
10  999 1.205   6.695   8.88    1.22    18
20  -10 NA  NA  NA  NA  0
20  -0.2    NA  0   100 NA  50
20  0   NA  0   0   0   0
20  0.4 1.84    4.255   14.475  8.58    29.15
20  999 1.835   4.23    15.085  8.535   29.685
999 999 1.06    5.44    8.61    1.52    16.63

我试过

aggregate(.~ Guar1+Bucket2, df, mean, na.rm = FALSE)

但它排除了决赛桌中的所有NA。

如果我将df中的所有NA值设置为0,那么我就不会有平均值。

我希望有人可以帮助我。谢谢!

2 个答案:

答案 0 :(得分:1)

要避免删除NA行,请使用na.action = na.pass中的na.rm=TRUEmean,确保我们仅使用非NA元素mean

aggregate(.~ Guar1+Bucket2, df, mean, na.rm =TRUE, na.action = na.pass)

答案 1 :(得分:0)

使用dplyr软件包

检查此示例

您可以按多个变量进行分组。 dplyr包非常适合汇总结束等数据编辑。

dataFrame <- data.frame(group = c("a","a","a", "b","b","b"), value = c(1,2,NA,NA,NA,3))
library("dplyr")

   df <-  dataFrame %>%
      group_by(group) %>%
      summarise(Mean = mean(value, na.rm = T))

输出

# A tibble: 2 × 2
   group  Mean
  <fctr> <dbl>
1      a   1.5
2      b   3.0