我知道像xtabs和table这样的命令允许用户进行交叉制表
例如,以下命令生成一个数据透视表,显示具有相同齿轮数和气缸数的汽车数量。
> xtabs(~cyl+gear, data = mtcars)
gear
cyl 3 4 5
4 1 8 2
6 2 4 1
8 12 0 2
>
我们可以扩展公式,以便它可以显示每个垃圾箱中汽车的马力总和
> xtabs(hp~cyl+gear, data = mtcars)
gear
cyl 3 4 5
4 97 608 204
6 215 466 175
8 2330 0 599
>
我现在想知道,是否可以计算每个垃圾箱中汽车的马力平均值?例如像xtabs(mean(hp)~cyl+gear, data = mtcars)
答案 0 :(得分:10)
您可以使用cast
库
reshape
在一行中执行此操作
cast(mtcars, cyl ~ gear, value = 'hp', fun = mean)
答案 1 :(得分:7)
我从r-help收到的一个有趣的回应如下:
> attach(mtcars)
> tapply(hp,list(cyl,gear),mean)
3 4 5
4 97.0000 76.0 102.0
6 107.5000 116.5 175.0
8 194.1667 NA 299.5
>
答案 2 :(得分:3)
(将我的评论移至回复中,以便我可以更好地编辑它。)
我不确定如何使用xtabs
(我以前从未使用过),但是有两种方法可以使用reshape
和{{1} }包。
plyr
答案 3 :(得分:0)
另一种计算方法是使用aggregate()函数。虽然输出不是表格的形式。 (通过twitter)
> aggregate(hp~cyl+gear,data=mtcars,mean)
cyl gear hp
1 4 3 97.0000
2 6 3 107.5000
3 8 3 194.1667
4 4 4 76.0000
5 6 4 116.5000
6 4 5 102.0000
7 6 5 175.0000
8 8 5 299.5000
>