2011-03-10 50 views
3

我喜歡plyr將數據幀分成多個數據集然後在每個數據集上執行相同操作的能力。最好的部分是當它將結果顯示爲一個整齊緊湊的標籤表格時。我喜歡使用each()將一堆計算投入到一行中。但是,我不明白爲什麼在ddply參數中使用匯總功能會導致輸出失敗,並使其輸出很長並且沒有標籤。看看這裏,看看我的意思。你能告訴我我做錯了什麼嗎?我更喜歡使用總結。如何從plyr輸出寬而不是長的總結

讓我們先設置一個示例數據框。想象一下,你有60人蔘加了一項研究。其中20個很有趣,20個很聰明,20個很好。然後每個主題都得到一個分數。

type<-rep(c("funny","clever", "nice"),20) 
score<-rnorm(60)+10 
data<-data.frame(type,score) 

現在我想展示的平均分,平均分,最低分和最高分每個3種類型的人

ddply(data,.(type), summarise, each(mean,median,min,max)(score)) 

線上面應該給一個漂亮的表(表3行 - 每種類型1和4列數據)。唉,它只給出一整列長表,只有一列數字,其中沒有一列標出。

ddply(data,.(type), function(jjkk) each(mean,median,min,max)(jjkk$score)) 

上面的代碼給了我想要的。你能解釋我對ddply語法的理解嗎?

回答

5

拼寫出的功能,如在:

ddply(data,"type", summarise, mean=mean(score),median=median(score),max=max(score),min=min(score)) 

按您所希望的格式輸出。

我認爲你的問題是,each()正在返回一個向量,其中summarize()是不是真的以你打算的方式處理。

4

嗯...我太累了,想想一個班輪,但reshape會做的伎倆:

library(reshape) 
library(plyr) 
mdtf <- melt(data) 
cast(mdtf, type ~ ., each(min, max, mean, median)) 
    type  min  max  mean median 
1 clever 7.808648 12.08930 10.125563 10.27269 
2 funny 8.302777 12.04066 9.941331 10.07333 
3 nice 8.442508 11.80132 10.085667 10.07261