我有一个像
这样的矢量 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
答案 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