【发布时间】:2017-10-18 14:18:40
【问题描述】:
我有一个数字向量
x <- c(0, 28, 59, 89, 0, 15, 16, 0, 35, 31)
#[1] 0 0 31 30 0 15 16 0 35 31
对于特殊情况,我想计算它的累积总和。给定:
month_vec <- seq(as.Date("2009-02-01"), length = 10, by = "1 month") - 1
day_vec <- as.numeric(substr(month_vec, 9, 10))
# > day_vec
#[1] 31 28 31 30 31 30 31 31 30 31
如果与之前元素的差异大于或等于day_vec 中的值,我只想cumsum(x)。
结果应该是这样的:
my_custom_cumsum(x)
#[1] 0 0 31 61 0 15 16 0 35 66
因为x[4]等于day_vec[4],x[3]和x[4]是相加的。但是,x[6] 和 x[7] 不会累加,因为它们小于它们在 day_vec 中的相应位置。但是x[9] 和x[10] 应该再次被累加——换句话说:如果与之前元素的差值小于day_vec 中的值,则应该重置累加。有人知道如何优雅地解决这个问题吗?
【问题讨论】:
-
x 和 day_vec 的长度不同 - 应该是这样吗?
-
不,典型的复制粘贴错误。我将 day_vec 的长度增加到 7