考虑此序列,我们可以将其视为事件之间的时间"
Consider this sequence, which we can think of as "time between events"
x <- c(5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2)
我想将它们分组为30个存储桶,但这些存储桶会重置.期望的结果:
I would like to group these into buckets of 30, but buckets that reset. Desired outcome:
output <- c(0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2)
这是因为,当我们累积到30时,我们将重置"并再次开始计数.因此,5 + 40 > 30,我们下降到零并开始累积加法,直到达到30 ...(3 + 6 + 0 ...),这在我们达到x[10] == 18时发生.
This is because, when we get to a cumulative 30, we "reset" and begin counting again. So, 5 + 40 > 30, we drop down to zero and begin cumulative adding until we reach 30...(3 + 6 + 0 ...), which happens at when we reach x[10] == 18.
推荐答案一种选择是使用Reduce()计算累计和,当sum超过某个阈值时,可以将sum设置为零:
One option is to use Reduce() to calculate the cumulative sum where you can set the sum to be zero, when it exceeds some threshold:
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更多推荐
将数字序列分成若干组,一旦达到累积阈值,这些组将重置
发布评论