R中的汇总平均值表

时间:2015-08-22 17:49:09

标签: r aggregate frequency

我想创建一个分类数据的均值表。

我可以轻松创建频率表,例如:

ftable(xtabs(formula = ~ cyl + am, data = mtcars))

    am  0  1
cyl         
4       3  8
6       4  3
8      12  2

但是,不是每个类别的元素数量,我想将每个单元格的均值(或其他统计数据)放在聚合表中:

aggregate(mtcars$mpg, by = list(mtcars$cyl, mtcars$am), FUN = mean)

  Group.1 Group.2        x
1       4       0 22.90000
2       6       0 19.12500
3       8       0 15.05000
4       4       1 28.07500
5       6       1 20.56667
6       8       1 15.40000

而不是像上面聚合表中的列表,我希望表格形式的均值在频率表中。

此外,我想为更复杂的表格执行此操作,例如:

ftable(xtabs(formula = ~ cyl + am + carb , data = mtcars))

       carb 1 2 3 4 6 8
cyl am                 
4   0       1 2 0 0 0 0
    1       4 4 0 0 0 0
6   0       2 0 0 2 0 0
    1       0 0 0 2 1 0
8   0       0 4 3 5 0 0
    1       0 0 0 1 0 1

创建这样的平均值表会带来额外的复杂性。有些单元格没有任何元素,因此这些单元格的均值应为NA

1 个答案:

答案 0 :(得分:1)

我在aggregate函数的帮助下找到了解决方案:

aggData1 <- aggregate(mtcars$mpg, 
                      by = list(cyl = mtcars$cyl, am = mtcars$am), 
                      FUN = mean)
xtabs(x ~ ., data = aggData1)

   am
cyl        0        1
  4 22.90000 28.07500
  6 19.12500 20.56667
  8 15.05000 15.40000

对于三个分类变量:

aggData2 <- aggregate(mtcars$mpg, 
                      by = list(cyl = mtcars$cyl, am = mtcars$am, carb = mtcars$carb), 
                      FUN = mean)
ftable(xtabs(x ~ ., data = aggData2))

       carb     1     2     3     4     6     8
cyl am                                         
4   0       21.50 23.60  0.00  0.00  0.00  0.00
    1       29.10 27.05  0.00  0.00  0.00  0.00
6   0       19.75  0.00  0.00 18.50  0.00  0.00
    1        0.00  0.00  0.00 21.00 19.70  0.00
8   0        0.00 17.15 16.30 12.62  0.00  0.00
    1        0.00  0.00  0.00 15.80  0.00 15.00