替换比以前小的向量元素(使用NA)

时间:2013-11-29 16:48:29

标签: r loops if-statement data-manipulation

我有一个像

这样的矢量
    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-loop但是无法提出解决方案。还有其他选择吗?

(我的下一步是使用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

2 个答案:

答案 0 :(得分:6)

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

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

(在这里,我假设< 0是您正在寻找的,因为它与您的输出匹配,即使它与您的描述不完全匹配,只是提到“少于前一个”。)

答案 1 :(得分:2)

我认为你正在寻找cummax

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