2010-04-01 55 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 
相關問題