【问题标题】:Replace vector elements that are smaller than previous ones (with NA)替换小于以前的向量元素(使用 NA)
【发布时间】:2013-12-15 22:02:28
【问题描述】:

我有一个像

这样的向量
    a <- c(4,2,7,6,8,9,3,1,12,13)

我想用 NA 替换所有小于以前的元素,我的示例的结果应该是:

    [1]  4 NA  7 NA  8  9 NA NA 12 13

我考虑过使用 for 循环,但无法提出解决方案。还有其他选择吗?

(我的下一步是使用 na.approx() 通过线性插值替换 NA'y)

感谢使用 diff() 的提示。但是,我认识到我上面的示例并未涵盖我的数据集中的所有情况,因此这是一个更好的示例: 对于矢量

    b <- c(4,2,7,6,8,9,3,1,5,7,12,13)

我想买

    [1]  4 NA  7 NA  8  9 NA NA NA NA 12 13

同时

    b[diff(c(b[1], b)) < 0] <- NA

给我

    [1]  4 NA  7 NA  8  9 NA NA  5  7 12 13

【问题讨论】:

    标签: r loops if-statement data-manipulation


    【解决方案1】:

    您可以只使用diff 和常规提取/子集:

    a[diff(c(a[1], a)) < 0] <- NA
    a
    #  [1]  4 NA  7 NA  8  9 NA NA 12 13
    

    (在这里,我假设 &lt; 0 是您要查找的内容,因为它与您的输出匹配,即使它与您的描述不完全匹配,它只是提到“小于前一个”。 )

    【讨论】:

      【解决方案2】:

      我想你在找cummax:

      b[b < cummax(b)] <- NA
      # [1]  4 NA  7 NA  8  9 NA NA NA NA 12 13
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多