R:如果差异超过阈值,则累积和

Posted

技术标签:

【中文标题】R:如果差异超过阈值,则累积和【英文标题】:R: Cumulative sum if difference over threshold 【发布时间】: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 【参考方案1】:

我会使用用于子集的逻辑索引来执行此操作。对于应该“累积”的 x 的所有元素,它应该为真,其余元素为假。

idx <- x >= day_vec

现在您可以使用它来计算 cumsum 并将其分配给 x 中的正确元素:

x[idx] <- cumsum(x[idx])
x
#[1]  0  0 31 61  0 15 16

【讨论】:

我的问题并不完全准确。如果与之前元素的差异小于day_vec 中的值,则应该重置 cumsum。用更长的向量查看我的编辑。

以上是关于R:如果差异超过阈值,则累积和的主要内容,如果未能解决你的问题,请参考以下文章

R语言绘制火山图(volcano plot)实战:为差异表达基因(DEGs)添加颜色基于显著性阈值进行点的颜色美化为选定基因添加标签

Python Numpy累积/差异[重复]

Oracle 差异增量和累积增量的区别

在rman增量备份中,有差异增量和累积增量的概念

如何使用交叉验证检测过拟合:差异阈值应该是多少?

R语言mRNA差异表达分析