有谁知道一种巧妙的方法来对 ddply 汇总操作的结果进行排序?
这就是我正在做的以获得按深度降序排序的输出。
ddims <- ddply(diamonds, .(color), summarise, depth = mean(depth), table = mean(table))
ddims <- ddims[order(-ddims$depth),]
随着输出...
> ddims
color depth table
7 J 61.88722 57.81239
6 I 61.84639 57.57728
5 H 61.83685 57.51781
4 G 61.75711 57.28863
1 D 61.69813 57.40459
3 F 61.69458 57.43354
2 E 61.66209 57.49120
不太难看,但我希望有一种方法可以在 ddply() 中很好地完成它。有人知道怎么做吗?
Hadley 的 ggplot2 书中有 ddply 和 subset 的示例,但它实际上并没有对输出进行排序,只是选择每组中两个最小的菱形。
ddply(diamonds, .(color), subset, order(carat) <= 2)
我会利用这个机会做一些广告data.table
,它的运行速度更快,并且(在我看来)至少写起来也同样优雅:
library(data.table)
ddims <- data.table(diamonds)
system.time(ddims <- ddims[, list(depth=mean(depth), table=mean(table)), by=color][order(depth)])
user system elapsed
0.003 0.000 0.004
相比之下,无需订购,您的ddply
代码已经花费了 30 倍的时间:
user system elapsed
0.106 0.010 0.119
我对哈德利的出色工作表示敬意,例如在ggplot2
,以及普遍的敬畏,我必须承认对我来说,data.table
完全更换ddply
——出于速度原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)