R Plyr - 从DDPLY订购结果?

Tom*_*ell 6 r plyr

有没有人知道一个灵活的方式来订购ddply总结操作的结果?

这就是我正在做的是按降序深度排序输出.

  ddims <- ddply(diamonds, .(color), summarise, depth = mean(depth), table = mean(table))
  ddims <- ddims[order(-ddims$depth),]
Run Code Online (Sandbox Code Playgroud)

随着输出......

> 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
Run Code Online (Sandbox Code Playgroud)

不是太难看,但我希望在ddply()中做得很好.谁知道怎么样?

Hadley的ggplot2书有ddply和子集的这个例子,但实际上并没有对输出进行排序,只是选择每组最小的两颗钻石.

ddply(diamonds, .(color), subset, order(carat) <= 2)
Run Code Online (Sandbox Code Playgroud)

cra*_*ola 7

我将利用这个场合来宣传一下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 
Run Code Online (Sandbox Code Playgroud)

相比之下,如果没有订购,您的ddply代码已经需要30倍的时间:

  user  system elapsed 
 0.106   0.010   0.119
Run Code Online (Sandbox Code Playgroud)

尽管我对Hadley的出色工作表示尊重,例如ggplot2,并且总体上非常棒,但我必须承认,对于我来说,data.table完全取代ddply- 出于速度原因.