首页 > 解决方案 > 如何检查一系列值是否在带有 for 循环的向量中。R

问题描述

我想根据它们是否在向量中对值进行分类。我已经尝试了各种方式,但它仍然无法正常工作。

orig_vector <- c(0.00632, 0.02731, 0.02729, 0.03237, 0.06905, 0.02985, 0.08829, 0.14455, 0.21124, 0.17004)

cat_vector  <- c(0.00632, 0.02731, 0.02729, 0.03237)

for(j in 1:length(orig_vector)){
  ifelse(orig_vector[j] %in% cat_vector[1:2], orig_vector[j] <- 'Extreme',
         ifelse(orig_vector[j] %in% cat_vector[3:length(cat_vector)], orig_vector[j] <- 'Reasonable',
                orig_vector[j] <- 'Non-Outlier'))
  }         
}

我希望输出是

c("Extreme", "Extreme", "Reasonable", "Reasonable", "Non-Outlier", "Non-Outlier", "Non-Outlier", "Non-Outlier", "Non-Outlier")

挑战在于这个函数只是返回

c("Non-Outlier", "Non-Outlier", "Non-Outlier", "Non-Outlier", "Non-Outlier", "Non-Outlier", "Non-Outlier", "Non-Outlier", "Non-Outlier", "Non-Outlier")

我在使用过滤器捕获值时遇到问题,我不确定如何比较一个值是否等于向量中的一个值。

标签: r

解决方案


你可以sapply在这里使用:

output <- sapply(orig_vector, function(x){

    if(x %in% cat_vector[1:2]) return('Extreme')

    else if (x %in% cat_vector[3:length(cat_vector)]) return('Reasonable')

    else return('Non-Outlier')
})

print(output)

 [1] "Extreme"     "Extreme"     "Reasonable"  "Reasonable"  "Non-Outlier" "Non-Outlier"
 [7] "Non-Outlier" "Non-Outlier" "Non-Outlier" "Non-Outlier"

推荐阅读