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)

下面是预期的输出

vec = 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)

以下是以下解决方案的性能-

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 所述,此解决方案在 **10, 12, 11** 的情况下不起作用。

library(dplyr) vec[c(which(vec >= lag(vec)))] <- NA

更新更新的问题:基本上是相同的答案:

library(dplyr)

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)

vec[c(which(vec >= lag(vec)))] <- NA
vec

[1] 14.200  3.700  2.875  2.175  1.575  1.100  0.700  0.475  0.300     NA  0.125     NA  0.025     NA  0.015     NA

我们可以使用 lag然后比较两个向量,得到索引为which并将 NA 分配给该索引:

library(dplyr)

vec[c(which(vec > lag(vec)))] <- NA

[1] 14.200  3.700  2.875  2.175  1.575  1.100  0.700  0.475  0.300     NA  0.125     NA

关于r - 比较向量中的值,如果下一个值大于或等于任何先前值,则将其设为 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72691292/

相关文章:

r - 在 R 中绘制大量行

R (tidyverse)-用于卡方独立性检验的 2 个 calcategori 变量的聚合数据的列总和?

R 验证库

r - 在 R 中找不到示例文件

r - 如何在 data.table 中选择同时匹配另一个 data.table 中的两个条件的行?

r - 查找数据框中包含特定对的组数

r - 将字符串拆分为 2 个字符的组合并扩展为 R 中的数据框

javascript - DataTable 中的 Actionbutton 不起作用,Shiny DT

使用 Shiny 中的按钮重定向到选项卡

r - 将表应用于向量列表并将其聚合