R:按月和年份汇总数据(与数据透视表类似)

时间:2015-08-19 16:18:57

标签: r pivot-table transpose

我试图按月和年总结R中的数据。我正在使用ddply函数来总结数据但我想改变它的外观并进行正常的转置并不能给我想要的结果。我正在加载带有每日河流旁路数据的csv文件。数据包含以下字段:日期,年,月,日和旁路。我使用以下代码来总结我的文件:

summary<- ddply(file,c("Year", "Month"), summarise, Sum =  round(sum(Bypass*1.9835),0)) 
summary

输出如下:

Year Month   Sum
1946    10  1791
1946    11  1575
1946    12  1129
1947     1   823
1947     2   750
1947     3  1023

(这将持续约61年的数据)

所以我的问题...... 有没有办法按以下方式将数据转换为输出:

                             Month
Year    1   2   3    4   5   6   7   8   9  10      11      12
1946                                        1791    1575    1129
1947    823 750 1023

我只复制了一份数据样本,但是它已经过了2007年。

提前致谢

1 个答案:

答案 0 :(得分:1)

library(reshape2)
dcast(df, iYear ~ Month, value.var='Sum')

输出:

  iYear   1   2    3   10   11   12
1  1946  NA  NA   NA 1791 1575 1129
2  1947 823 750 1023   NA   NA   NA

如果您想用零替换NA:

df1 <- dcast(df, iYear ~ Month, value.var='Sum')
df1[is.na(df1)] <- 0

  iYear   1   2    3   10   11   12
1  1946   0   0    0 1791 1575 1129
2  1947 823 750 1023    0    0    0

数据:

df <- structure(list(iYear = c(1946L, 1946L, 1946L, 1947L, 1947L, 1947L
), Month = c(10L, 11L, 12L, 1L, 2L, 3L), Sum = c(1791L, 1575L, 
1129L, 823L, 750L, 1023L)), .Names = c("iYear", "Month", "Sum"
), class = "data.frame", row.names = c(NA, -6L))

  iYear Month  Sum
1  1946    10 1791
2  1946    11 1575
3  1946    12 1129
4  1947     1  823
5  1947     2  750
6  1947     3 1023