2014-12-13 79 views
0

我有一個數據幀是交付記錄。我如何創建一個總結數據框,其中有幾個月的列,客戶#的行和每月的數量總和?如何彙總R的月度數量?

> my.data 
    yr mo cust qty 
1 2010 6 2005161 620448 
2 2009 5 29290 533000 
3 2011 6 51800 125000 
4 2011 7 2005149 677856 
5 2009 5 51888 128000 
6 2011 1 290913 51400 
7 2010 9 2075516 352800 
8 2011 11 34029 574200 
9 2009 11 40740 734740 
10 2011 10 2016135 300209 
11 2011 5 2000294 605300 
12 2010 3 34004 675200 
13 2011 2 2030823 610236 
14 2011 12 2016188 682000 
15 2010 7 23409 85000 
16 2011 1 2089839 188000 
17 2011 11 34414 455658 
18 2011 7 2004149 166200 
19 2011 11 40404 235000 
20 2009 7 203203 531000 
+1

歡迎來到SO保羅。請務必閱讀[Stack Overflow問題清單](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist),特別是前兩點。 – zero323 2014-12-13 02:23:13

回答

2
library(reshape2) 
dcast(my.data, formula = cust ~ mo, fun.aggregate = sum, value.var = "qty") 
1

如果你想量每個月的總和,你可以做這樣的事情。 mydf是你的my.data。您可以使用tidyr包中的spread來轉換數據。然後,使用addmargins添加數量總和的行,這需要表或數組。您將其轉換爲data.frame。最後,你將廢話總數改爲yrcuts改爲NA

library(tidyr) 
foo <- as.data.frame(addmargins(as.matrix(spread(mydf, mo, qty, fill = 0)), 
        1, FUN = list(total = 'sum'))) 

foo[nrow(foo), c(1:2)] <- NA 

另外,你也可以做這樣的事情。

ana <- spread(mydf, mo, qty, fill = 0) 
ana[nrow(ana)+1, ] <- colSums(ana) 
ana[nrow(ana), c(1:2)] <- NA 

#  yr cust  1  2  3  5  6  7  9  10  11  12 
#1  2009 29290  0  0  0 533000  0  0  0  0  0  0 
#2  2009 40740  0  0  0  0  0  0  0  0 734740  0 
#3  2009 51888  0  0  0 128000  0  0  0  0  0  0 
#4  2009 203203  0  0  0  0  0 531000  0  0  0  0 
#5  2010 23409  0  0  0  0  0 85000  0  0  0  0 
#6  2010 34004  0  0 675200  0  0  0  0  0  0  0 
#7  2010 2005161  0  0  0  0 620448  0  0  0  0  0 
#8  2010 2075516  0  0  0  0  0  0 352800  0  0  0 
#9  2011 34029  0  0  0  0  0  0  0  0 574200  0 
#10 2011 34414  0  0  0  0  0  0  0  0 455658  0 
#11 2011 40404  0  0  0  0  0  0  0  0 235000  0 
#12 2011 51800  0  0  0  0 125000  0  0  0  0  0 
#13 2011 290913 51400  0  0  0  0  0  0  0  0  0 
#14 2011 2000294  0  0  0 605300  0  0  0  0  0  0 
#15 2011 2004149  0  0  0  0  0 166200  0  0  0  0 
#16 2011 2005149  0  0  0  0  0 677856  0  0  0  0 
#17 2011 2016135  0  0  0  0  0  0  0 300209  0  0 
#18 2011 2016188  0  0  0  0  0  0  0  0  0 682000 
#19 2011 2030823  0 610236  0  0  0  0  0  0  0  0 
#20 2011 2089839 188000  0  0  0  0  0  0  0  0  0 
#total NA  NA 239400 610236 675200 1266300 745448 1460056 352800 300209 1999598 682000 
+0

謝謝你的建議。對於這兩個選項,你建議我得到一個錯誤「錯誤:行(1,4),(2,...」的重複標識符(然後列出所有重複項)。從我的示例數據中不明顯,但每個客戶都有多個活動 – Paul 2014-12-15 22:46:31

+0

@Paul嗨,謝謝你的留言。你能否提供一個可重複的例子來修改你的問題? – jazzurro 2014-12-16 02:30:10