You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言实现:将向量中大于等于此前任意值的元素替换为NA

R向量处理:将非严格历史最小值位置替换为NA

需求说明

对R语言向量vec逐元素做如下处理:遍历每个位置的元素,若该元素大于等于它之前出现过的任意元素(即没有产生新的严格历史最小值),则将该位置的值替换为NA。

测试用例

原始输入向量

vec = c(14.2, 3.7, 2.875, 2.175, 1.575, 1.1, 0.7, 0.475, 0.3, 0.65, 0.125, 0.925, 0.025, 0.025, 0.015, 0.020)

预期处理结果

c(14.2, 3.7, 2.875, 2.175, 1.575, 1.1, 0.7, 0.475, 0.3, NA, 0.125, NA, 0.025, NA, 0.015, NA)

实现方案与性能对比

我们选取了两种社区常见实现,做了1000次迭代的基准性能测试,测试代码如下:

microbenchmark::microbenchmark(
  TarJae = vec[c(which(vec >= shift(vec, n = 1L, type = "lag")))] <- NA,
  onyambu = replace(vec, vec > cummin(vec) | duplicated(vec), NA),
  times = 1000
)

测试输出结果:

expr     min       lq      mean   median       uq      max neval cld
  TarJae  41.846  44.1550  49.79315  46.2705  47.7505 2742.726  1000  b 
 onyambu  18.066  19.4435  21.21144  20.3280  21.3395   69.071  1000 a  

从测试结果可以得到明确结论:

  • onyambu提出的基于cummin(累积最小值计算)搭配duplicated(重复值判断)的方案性能显著更优,中位运行耗时仅20.3微秒左右,最大耗时不超过70微秒,运行稳定性极强
  • TarJae的移位比较方案中位耗时约46.3微秒,且存在超过2.7毫秒的极端长尾耗时,性能和稳定性都弱于前者

内容的提问来源于stack exchange,提问作者Saurabh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:15:35