首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解plyr的ddply函数

理解plyr的ddply函数
EN

Stack Overflow用户
提问于 2014-09-10 00:50:57
回答 1查看 2.5K关注 0票数 3

我正在学习R,不懂下面的一段函数。在下面的函数中,count=length(address)到底在做什么?还有别的办法吗?

代码语言:javascript
复制
crime_dat = ddply(crime, .(lat, lon), summarise, count = length(address))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-10 01:20:46

plyr库有两个非常常见的“助手”函数,summarizemutate

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

Mutate用于添加列(类似于基R中的transform ),但不丢弃任何内容。如果您运行这两个命令,它们应该很好地说明两者之间的区别。

代码语言:javascript
复制
library(plyr)
ddply(mtcars, .(cyl), summarise, count = length(mpg))
ddply(mtcars, .(cyl), mutate, count = length(mpg))

在这个例子中,就像在您的示例中一样,目标是计算出每个组中有多少行。在将ddplysummarise一起使用时,我们需要选择一个以单个列(向量)作为参数的函数,因此length是一个不错的选择。因为我们只是在数行/取向量的长度,所以我们传递给它的列并不重要。或者,我们可以使用nrow,但是为此我们必须传递一个完整的data.frame,这样summarise就不能工作了。在这种情况下,它可以帮助我们输入:

代码语言:javascript
复制
ddply(mtcars, .(cyl), nrow)

但是如果我们想做的更多,总结真的很精彩。

代码语言:javascript
复制
ddply(mtcars, .(cyl), summarise, count = length(mpg),
      mean_mpg = mean(mpg), mean_disp = mean(disp))

还有别的办法吗?

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

我再次建议亚历克斯将dplyr用于类似的事情。summarizemutate概念仍然被使用,但工作速度更快,代码可读性更强。

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25755722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档