【发布时间】:2019-01-10 01:21:32
【问题描述】:
我有一个包含季度交易的数据集。 PERIOD 代表交易的季度,INCREM 代表增量金额。
tbl <- data.frame(PERIOD = c(2,3,6,10,11),
INCREM = c(10,50,-30,-10,-20))
我想获得年度累计总和(即第 4、8、12 期的累计总和)。
library(dplyr)
library(tidyr)
tbl %>%
mutate(CUMSUM = cumsum(INCREM)) %>%
select(-INCREM) %>%
mutate(PERIOD = factor(PERIOD, 1:12)) %>%
complete(PERIOD) %>%
fill(CUMSUM) %>%
mutate(PERIOD = as.numeric(PERIOD)) %>%
filter(PERIOD %% 4 == 0)
结果:
PERIOD CUMSUM
1 4 60
2 8 30
3 12 0
这可行,但效率不高。原始数据集为 5 行,最终数据集为 3 行,但在dplyr 链的中间(fill() 之后)数据集为 12 行。
有没有更有效的方法来获取年度累计总和?
另外,我的实际数据来自数据库查询。你认为在 R 中操作之前,我在 SQL 查询中处理这个累积求和会更好吗?
【问题讨论】:
-
我会调查
cut作为创建群组的一种方式,而无需以fill()-cut(tbl$PERIOD, c(1,4,8,12), labels=c(4,8,12), include.lowest=TRUE)为例。