考虑这个序列,我们可以将其视为"事件之间的时间"
x <- c(5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2)
我想把它们分成30个桶,但重置的桶。期望的结果:
output <- c(0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2)
这是因为,当我们累计达到30时,我们会重置&#34;并再次开始计算。因此,5 + 40 > 30
,我们下降到零并开始累积添加,直到我们达到30 ...(3 + 6 + 0 ...
),这发生在我们到达x[10] == 18
时。
答案 0 :(得分:3)
一种选择是使用Reduce()
计算累积总和,当sum
超过某个阈值时,可以将cumsum(Reduce(function(x, y) if(x < 30) x + y else y, x, acc = T) >= 30)
# [1] 0 1 1 1 1 1 1 1 1 2 2 2 2 2
设置为零:
aggregate()