用于替换向量中的某些值的函数

时间:2016-12-02 19:39:08

标签: r function vector

说我有两个向量:

a<-c(6,6,NA,NA,9,9,8,NA,NA,7,NA,NA,NA,NA)
b<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,8,NA,5,7,NA)

如果向量有任何增加,我将值更改为NA。

说,在向量a中,第五个值为9,从上一个值6增加,因此它将是NA以及之后的所有值。对于b向量,从5更改为7,因此7向前必须为NA

预期产出:

a = c(6,6,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA)
b = c(NA,NA,NA,NA,NA,NA,NA,NA,NA,8,NA,5,NA,NA)

如果向量没有增加,则向量保持不变。

如何创建实现此功能的功能?

1 个答案:

答案 0 :(得分:2)

这应该可行。

a<-c(6,6,NA,NA,9,9,8,NA,NA,7,NA,NA,NA,NA)
b<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,8,NA,5,7,NA)

foo <- function(vec){
  na.rm.vec <- vec[!is.na(vec)]
  na.rm.vec[na.rm.vec > na.rm.vec[1]] <- NA
  vec[!is.na(vec)] <- na.rm.vec
  return(vec)
}

foo(a)
# [1]  6  6 NA NA NA NA NA NA NA NA NA NA NA NA
foo(b)
# [1] NA NA NA NA NA NA NA NA NA  8 NA  5  7 NA