我正在学习R并且不理解以下功能的一部分。在下面的函数中count=length(address)
究竟在做什么?还有另一种方法吗?
crime_dat = ddply(crime, .(lat, lon), summarise, count = length(address))
答案 0 :(得分:8)
plyr
库有两个非常常见的"帮助"函数,summarize
和mutate
。
当您想要丢弃不相关的数据/列时,使用汇总,只保留分组变量的级别以及这些组的特定和汇总函数(在您的示例中为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
来做这样的事情。 summarize
和mutate
概念仍在使用,但它的工作速度更快,代码更易读。
其他选项包括基本R中的data.table
包(也是一个很好的选项),tapply()
或aggregate()
以及无数其他可能性。