我的数据按每月频率提供,我正在尝试按季度汇总它们。我正在使用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具有相同的列但频率为季度。
我怎么能这样做?
答案 0 :(得分:2)
以下是一个如何按季度分组和总结的示例(感谢@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
现在,按公司,年份和季度汇总。为此,我们从year
创建quarter
和date
分组变量(我们使用整数除法(%/%
)来创建年份和mod(%%
)加上整数除法来创建四分之一),并为每个子组计算value1
和value2
的总和。这一切都假设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))