如何总结R中的每月数量?

时间:2014-12-13 01:56:16

标签: r dataframe summary

我有一个数据框是交付记录。如何创建一个汇总数据框,其中包含列数月,客户#行数和每月数量总和?

> 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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

如果你想要每个月的数量总和,你可以做这样的事情。 mydfmy.data。您可以使用spread包中的tidyr转换数据。然后,使用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