【问题标题】:How can I aggregate data.table in quarterly frequency?如何按季度汇总 data.table?
【发布时间】:2016-11-15 01:58:41
【问题描述】:

我的数据按月提供,我正在尝试按季度汇总它们。老实说,我正在使用我不太了解的 data.table 包。

   X.DATA_BASE                                             NOME_INSTITUICAO     SALDO.x    SALDO.y
1:      199407 ASB S/A - CFI                                                    1694581    1124580
2:      199407 BANCO ARAUCARIA S.A.                                            40079517    6314782
3:      199407 BANCO ATLANTIS S.A.                                            200463907    9356445
4:      199407 BANCO BANKPAR                                                    1078342    5770046
5:      199407 BANCO BBI                                                       97812975   31112289                                                                                            

对于由 X.DATA_BASE 定义的每个日期,199407 = 1994 年 7 月。我有几个具有 SALDO.x 和 SALDO.y 值的机构。我想在每个季度为每个机构添加 SALDO.x 和 SALDO.y。问题之一是一些机构通过时间进出。归根结底,我希望 mydata 具有相同的列但季度频率。

我该怎么做?

【问题讨论】:

    标签: r date data.table aggregate frequency


    【解决方案1】:

    这是一个如何按季度分组和求和的示例(感谢 @eddi 提出的改进建议)。首先让我们创建一些假日期:

    library(data.table)
    
    set.seed(1485)
    dat = data.table(date=rep(c(199401:199412,199501:199512),2),
                 firm=rep(c("A","B"), each=24),
                 value1=rnorm(48,1000,10),
                 value2=rnorm(48,2000,100))
    
    dat
    
          date firm    value1   value2
     1: 199401    A 1009.8620 2054.251
     2: 199402    A 1009.7180 2124.202
     3: 199403    A 1014.3421 1919.251
    ...
    46: 199510    B  992.9961 2079.517
    47: 199511    B  997.9147 1968.676
    48: 199512    B 1002.5993 2006.231
    

    现在,按公司、年份和季度进行汇总。为此,我们从 date 创建 yearquarter 分组变量(我们使用整数除法 (%/%) 来创建年份和 mod (%%) 加上整数除法来创建季度),以及计算每个子组的value1value2 的总和。这一切都假设date 是数字。如果您将其存储为字符或因子,请先转换为数字:

    dat.summary = dat[ , list(valueByQuarter = sum(sum(value1) + sum(value2))), 
                  by=list(firm, 
                          year=date %/% 100, 
                          quarter=(date %% 100 - 1) %/% 3 + 1)]
    
    dat.summary
    
        firm year quarter valueByQuarter
     1:    A 1994       1       9131.626
     2:    A 1994       2       8953.116
     3:    A 1994       3       8981.407
     4:    A 1994       4       9175.959
     5:    A 1995       1       9003.225
     6:    A 1995       2       8962.690
     7:    A 1995       3       8809.256
     8:    A 1995       4       8885.264
     9:    B 1994       1       9000.791
    10:    B 1994       2       8936.356
    11:    B 1994       3       8905.789
    12:    B 1994       4       8951.369
    13:    B 1995       1       8922.716
    14:    B 1995       2       9097.134
    15:    B 1995       3       8724.188
    16:    B 1995       4       9047.934
    

    对于dplyr 的粉丝,这是dplyr 的方法:

    library(dplyr)
    
    dat %>% 
      group_by(firm, year=date %/% 100, 
               quarter=(date %% 100 - 1) %/% 3 + 1) %>%
      summarise(valueByQuarter = sum(value1 + value2))
    

    【讨论】:

    • 工作正常。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2014-10-05
    • 2013-05-07
    相关资源
    最近更新 更多