我的数据框有两列用作分组键,每组有 17 列需要求和,还有一列应该进行平均。让我在不同的数据框架上说明这一点,diamonds
from ggplot2
.
我知道我可以这样做:
ddply(diamonds, ~cut, summarise, x=sum(x), y=sum(y), z=sum(z), price=mean(price))
但是,虽然 3 列是合理的,但 17 列是不可接受的。
在研究这个问题时,我发现colwise
功能,但我想出的最好的是:
cbind(ddply(diamonds, ~cut, colwise(sum, 7:9)), price=ddply(diamonds, ~cut, summarise, mean(price))[,2])
是否有可能进一步改进这一点?我想以更直接的方式做到这一点,例如(想象的命令):
ddply(diamonds, ~cut, colwise(sum, 7:9), price=mean(price))
or:
ddply(diamonds, ~cut, colwise(sum, 7:9), colwise(mean, ~price))
总结:
- 我不想像第一个示例那样显式键入所有 17 列
x
, y
, and z
.
- 理想情况下,我想通过一次调用来完成此操作
ddply
,无需求助于cbind
(或类似的函数),如第二个示例中所示。
作为参考,我期望的结果是 5 行 5 列:
cut x y z price
1 Fair 10057.50 9954.07 6412.26 4358.758
2 Good 28645.08 28703.75 17855.42 3928.864
3 Very Good 69359.09 69713.45 43009.52 3981.760
4 Premium 82385.88 81985.82 50297.49 4584.258
5 Ideal 118691.07 118963.24 73304.61 3457.542