【问题标题】:R: Summarize Data by Month and Year (Similar to pivot table)R:按月和年汇总数据(类似于数据透视表)
【发布时间】:2015-08-19 16:18:56
【问题描述】:

我正在尝试按月和年汇总 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 年。

提前致谢

【问题讨论】:

    标签: r pivot-table transpose


    【解决方案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
    

    【讨论】:

    • 嗨@nebula026,如果这个或任何答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多