使用ddply对数据子集应用函数

5

我正在尝试使用ddply方法来处理一个包含3000部电影信息的数据框,并计算每个流派的平均票房。我对R不熟悉,已经阅读了所有与ddply相关的问题,但似乎仍无法正确使用。以下是我的代码:

> attach(movies)
> ddply(movies, Genre, mean(Gross))
Error in llply(.data = .data, .fun = .fun, ..., .progress = .progress,  : 
.fun is not a function.

我该如何编写一个函数,以电影类型分组,计算“Gross”列中每个电影集的平均值?我知道这似乎是一个简单的问题,但文档对我来说真的很难理解,而且我对R语法还不太熟悉。

除了ddply之外,是否有其他方法可以使这更容易?

谢谢!


你对数据进行了一些预处理吗?电影数据集中既没有名为“Gross”的列,也没有名为“Genre”的列。有一组二进制标志表示不同的流派,以及一个预算列...http://had.co.nz/data/movies/ - Chase
2个回答

10

这里是一个使用ggplot2中可用的tips数据集的示例。

library(ggplot2);
mean_tip_by_day = ddply(tips, .(day), summarize, mean_tip = mean(tip/total_bill))

希望这对您有用


2

对于像这样的简单操作,您可能不需要使用plyr。 tapply() 能够轻松完成任务,并且您不需要加载其他软件包。 语法也比Ramnath的更简单:

tapply(tips$tip, tips$day, mean)

请注意,plyr是许多任务的绝佳工具。对我而言,在这里使用它似乎有些过度设计。


4
请注意,以上解决方案返回一个列表,而上面的 plyr 解决方案返回一个数据框。您可以轻松地在您的解决方案中包装 as.data.frame()plyr 看起来有点过头了,直到您开始欣赏显式声明您操作对象的输入和输出结构的好处。 - Chase
好的观点。但原始问题没有指定所需格式。也许我应该从ddply中推断出来。 - Vincent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接