如何通过某些变量折叠数据框,在其他变量中取平均值
Posted
技术标签:
【中文标题】如何通过某些变量折叠数据框,在其他变量中取平均值【英文标题】:How can I collapse a dataframe by some variables, taking mean across others 【发布时间】:2011-02-03 05:33:02 【问题描述】:我需要通过一些变量来总结数据框,而忽略其他变量。这有时被称为崩溃。例如。如果我有这样的数据框:
Widget Type Energy
egg 1 20
egg 2 30
jap 3 50
jap 1 60
然后按 Widget 折叠,以 Energy 为因变量,Energy~Widget,将产生
Widget Energy
egg 25
jap 55
在 Excel 中,最接近的功能可能是“数据透视表”,我已经研究了如何在 python 中执行此操作 (http://alexholcombe.wordpress.com/2009/01/26/summarizing-data-by-combinations-of-variables-with-python/),这里是 R 使用 doBy 库执行非常相关的操作的示例 (http://www.mail-archive.com/r-help@r-project.org/msg02643.html ),但是有没有一种简单的方法来完成上述操作?更好的是,ggplot2 库中是否内置了任何东西来创建跨某些变量折叠的图?
【问题讨论】:
【参考方案1】:使用aggregate
总结一个因素:
> df<-read.table(textConnection('
+ egg 1 20
+ egg 2 30
+ jap 3 50
+ jap 1 60'))
> aggregate(df$V3,list(df$V1),mean)
Group.1 x
1 egg 25
2 jap 55
要获得更大的灵活性,请查看tapply
函数和plyr
包。
在ggplot2
中使用stat_summary
进行总结
qplot(V1,V3,data=df,stat="summary",fun.y=mean,geom='bar',width=0.4)
【讨论】:
by
也时不时派上用场。
对于使用ddply
来自plyr
包的示例,请查看此相关问题:***.com/questions/2473659/…
我会查看 plyr 的通用 SAC 组合框架(什么是数据透视表),这是一个很好的资源
谢谢!我花了一段时间才了解 ggplot2 stat。我想这正是我想要的: ggplot(data=df,aes(x=Widget,y=Energy))+ stat_summary(fun.y=mean,ymin=10,ymax=60)
您真的想要排长队吗?否则 stat_summary(fun.y=mean,geom='point')
只会产生分数。【参考方案2】:
对于熟悉 SQL 的人来说,操作数据帧的另一种方法是 sqldf 包中的 sqldf 命令。
library(sqldf)
sqldf("SELECT Widget, avg(Energy) FROM yourDataFrame GROUP BY Widget")
【讨论】:
【参考方案3】:@Jyotirmoy 提到这可以通过plyr
库来完成。这就是它的样子:
DF <- read.table(text=
"Widget Type Energy
egg 1 20
egg 2 30
jap 3 50
jap 1 60", header=TRUE)
library("plyr")
ddply(DF, .(Widget), summarise, Energy=mean(Energy))
给了
> ddply(DF, .(Widget), summarise, Energy=mean(Energy))
Widget Energy
1 egg 25
2 jap 55
【讨论】:
以上是关于如何通过某些变量折叠数据框,在其他变量中取平均值的主要内容,如果未能解决你的问题,请参考以下文章