如何通过某些变量折叠数据框,并在其他变量中取平均值

时间:2010-04-01 04:49:36

标签: r ggplot2 pivot-table

我需要通过一些变量来总结数据框,忽略其他变量。这有时被称为崩溃。例如。如果我有这样的数据帧:

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库来做一些非常相关的事情({ {3}}),但是有一种简单的方法可以做到吗?更好的是ggplot2库中是否有任何内容可以创建在某些变量中崩溃的图形?

3 个答案:

答案 0 :(得分:14)

使用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)

答案 1 :(得分:5)

对于熟悉SQL的人来说,操作数据帧的另一种方法可以是sqldf包中的sqldf命令。

library(sqldf)
sqldf("SELECT Widget, avg(Energy) FROM yourDataFrame GROUP BY Widget")

答案 2 :(得分:1)

@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