【发布时间】:2026-02-17 09:40:01
【问题描述】:
在 R 中,我有一个向量,我想删除某些元素,对过滤后的数组应用计算,然后将删除的元素重新插入。
比如我想去掉NaNs,然后再应用cumsum:
> v = c(1, NaN, 2, NaN, 3)
> (nans = is.nan(v))
[1] FALSE TRUE FALSE TRUE FALSE
> (filtered = v[!nans])
[1] 1 2 3
> (summed = cumsum(filtered))
[1] 1 3 6
现在,我想要将NaNs 插入到向量中的原始位置,给我c(1, NaN, 3, NaN, 6)。
这样做的天真方法是:
> summed[nans] = v[nans]
> summed
[1] 1 NaN 6 NaN NA
但显然这是错误的。因为summed 的索引与v 不同,我不能简单地重复使用nans 逻辑向量。
请注意,这只是一个简化的示例。在我真正的问题中,删除的值并不完全相同(NaN),我也不知道将删除多少个值,也不知道v 是多长时间。
所以我的问题是,我如何才能反转我在过滤向量时所做的原始逻辑索引,并取回处理后的数组,但又插入了NaNs?我对任何核心 R 或库解决方案都很满意。
【问题讨论】: