2013-11-04 46 views
0
dat=data.frame(
    year=c(rep(2007,5),rep(2008,3),rep(2009,3)), 
    province=c("a","a","b","c","d","a","c","d","b","c","d"), 
    sale=1:11) 
tapply(dat$sale,list(dat$year,dat$province),sum) 
     a b c d 
2007 3 3 4 5 
2008 6 NA 7 8 
2009 NA 9 10 11 

在這種情況下,如何將tapply更改爲聚合以獲得相同的結果?我可以將tapply更改爲聚合以獲得相同的結果嗎?

+0

請問爲什麼?在某種程度上,「tapply」不能爲你工作嗎?一般的解決方案是(如果你想使用'聚合')將首先'聚合',然後'重塑'。例如:'reshape(aggregate(sale〜year + province,dat,sum),direction =「wide」,idvar =「year」,timevar =「province」)',但不知道爲什麼,所以猶豫不決,一個答案。 – A5C1D2H2I1M1N2O1R2T1

+0

另一個選擇是使用'xtabs',結果是你想要的格式:'xtabs(sale〜year + province,data = dat)' –

回答

0

它不會被安排爲一個表格,而是作爲一個「長格式」的演示文稿。

> aggregate(dat$sale,list(dat$year,dat$province),sum) 
    Group.1 Group.2 x 
1  2007  a 3 
2  2008  a 6 
3  2007  b 3 
4  2009  b 9 
5  2007  c 4 
6  2008  c 7 
7  2009  c 10 
8  2007  d 5 
9  2008  d 8 
10 2009  d 11 

您是否認爲同樣不清楚。信息內容是一樣的。

相關問題