2010-04-01 52 views
11

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

Widget Type Energy 
egg 1 20 
egg 2 30 
jap 3 50 
jap 1 60 

然后,通过微件的崩溃,与能源因变量,能源〜窗口小部件,会产生

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/[email protected]/msg02643.html),但有没有一种简单的方法来做到这一点?甚至更好的是,ggplot2库中有什么可以创建可以跨越一些变量的图表?

回答

13

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

'by'也派上用场,不时。 – 2010-04-01 05:42:07

+1

为真。也'ave' – 2010-04-01 05:46:43

+3

为例使用从'plyr'包'ddply'看看这个相关的问题:http://stackoverflow.com/questions/2473659/r-what-are-the-best-functions-在 – mropa 2010-04-01 06:08:44

4

对于那些熟悉SQL,另一种方式来操纵dataframes可以在sqldf包sqldf命令。

library(sqldf) 
sqldf("SELECT Widget, avg(Energy) FROM yourDataFrame GROUP BY Widget") 
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 
相关问题