【问题标题】:Function to replace certain values in a vector替换向量中某些值的函数
【发布时间】:2017-04-17 19:24:16
【问题描述】:

假设我有两个向量:

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 向量,有一个从57 的变化,所以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)

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

如何创建一个函数来实现这个?

【问题讨论】:

标签: r function vector


【解决方案1】:

这应该可行。

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

【讨论】:

  • 非常感谢您的帮助!!!我可以再问一个问题吗?使用与上面a和b相同的两个向量,编写一个函数来检查:当向量中的值减少时,返回一个逻辑向量“False”如果从一个值到另一个值的减少大于1,则返回如果两个相邻的值的减少量实际上为 1,则为“真”。因此对于向量 a,它应该返回 true,因为 9-8=1 和 8-na-na-7=1。对于 b,它应该返回 false,因为 8-na-5 可以允许减少 2。8-5=3 更大大于 1。
猜你喜欢
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多