我想创建一个分类数据的均值表。
我可以轻松创建频率表,例如:
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
。
答案 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