了解plyr的ddply函数

时间:2014-09-10 00:50:58

标签: r plyr

我正在学习R并且不理解以下功能的一部分。在下面的函数中count=length(address)究竟在做什么?还有另一种方法吗?

crime_dat = ddply(crime, .(lat, lon), summarise, count = length(address))

1 个答案:

答案 0 :(得分:8)

plyr库有两个非常常见的"帮助"函数,summarizemutate

当您想要丢弃不相关的数据/列时,使用汇总,只保留分组变量的级别以及这些组的特定和汇总函数(在您的示例中为length)。 / p>

Mutate用于添加一个列(类似于基础R中的transform),但不丢弃任何内容。如果你运行这两个命令,他们应该很好地说明差异。

library(plyr)
ddply(mtcars, .(cyl), summarise, count = length(mpg))
ddply(mtcars, .(cyl), mutate, count = length(mpg))

在此示例中,如您的示例所示,目标是确定每个组中有多少行。当像ddply这样使用summarise时,我们需要选择一个以单列(向量)作为参数的函数,因此length是一个不错的选择。由于我们只计算行数/取向量的长度,因此我们传递给它的列并不重要。或者,我们可以使用nrow,但为此我们必须传递整个data.frame,因此summarise无法工作。在这种情况下,它可以节省我们的输入:

ddply(mtcars, .(cyl), nrow)

但是如果我们想要更多,总结一下真的很闪耀

ddply(mtcars, .(cyl), summarise, count = length(mpg),
      mean_mpg = mean(mpg), mean_disp = mean(disp))

  

还有其他办法吗?

是的,还有很多其他方式。

我是第二次亚历克斯建议使用dplyr来做这样的事情。 summarizemutate概念仍在使用,但它的工作速度更快,代码更易读。

其他选项包括基本R中的data.table包(也是一个很好的选项),tapply()aggregate()以及无数其他可能性。