R Plyr - 从 DDPLY 订购结果?

标签 r plyr

有谁知道排序来自 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 和子集的例子,但它实际上并没有对输出进行排序,只是选择每组中的两个最小的菱形。
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 - 出于速度原因。

关于R Plyr - 从 DDPLY 订购结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5839265/

相关文章:

r - 强制原点从 0 开始

r - ddply错误: 'names' attribute [9] must be the same length as the vector [1]的含义

r - 通过聚合数据帧的列来计算相关性

r - 图层中的子集参数不再适用于 ggplot2 >= 2.0.0

r - 如何合并r中数据框中的列标题

r - 基于变量名称R的名称列表元素

r - 在 r 笔记本中添加目录

json - 从纬度和经度检索国家坐标

r - 基于特定条件进行过滤和添加的有效方法(本例中为 3 个条件)

R 复制直到满足长度