2015-08-19 73 views
0

我想按月份和年份总结R中的数据。我正在使用ddply函数来总结数据,但我想改变它的外观,并且执行正常的转置并不会给我想要的结果。我正在用每日河流旁路数据加载一个csv文件。数据包含以下字段:日期,年份,月份,日期和绕行。我用下面的代码来概括我的文件:R:按月份和年度汇总数据(类似于数据透视表)

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年

感谢

回答

0
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 

如果你想用零来取代在NAS:

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 
+0

嗨@ nebula026如果这个或任何答案已解决您的问题,请点击复选标记,考虑[接受它](http://meta.stackexchange.com/q/5234/179419)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。没有义务这样做。 – mpalanco