我的数据框看起来有点像这样:
wt <- data.frame(region = c(rep("A", 5), rep("B", 5)), time = c(1:5, 1:5),
start = c(rep(2,5), rep(4, 5)), value = rep(1, 10))
value
列中的值可以是任何数字(我在一个非常大的数据集中工作),但每个区域将超过相等长度的时间序列并且只有一个起始点。
我想在每个区域内执行累积总和,这些累积在开始点处开始累积,在时间序列中继续前进,并且在时间序列中的起始点之前包裹到行。
完整的数据表,包含预期的结果,如下所示:
region time start value result
A 1 2 1 5
A 2 2 1 1
A 3 2 1 2
A 4 2 1 3
A 5 2 1 4
B 1 4 1 3
B 2 4 1 4
B 3 4 1 5
B 4 4 1 1
B 5 4 1 2
时间列后跟cumsum
的简单转换不起作用,因为该函数关心的是行顺序,而不是任何特定因素。
考虑到这一点,我在一个巨大的数据表上运行,运行时绝对是一个问题,所以任何解决方案 必须 避免重新排序行。
如何做到这一点的想法?提前谢谢。
编辑:考虑时间是一个周期,例如一天中的小时数 - 例如,如果开始时间是2,则表示观察从时间2的一个实例开始,到下一个时间结束1.