簡體   English   中英

如何以季度頻率匯總data.table?

[英]How can I aggregate data.table in quarterly frequency?

我的數據以每月頻率提供,我試圖以季度頻率匯總它們。 我正在使用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具有相同的列,但季度頻率。

我怎么能這樣做?

這是一個如何按季度分組和總結的例子(感謝@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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM