Как проверить, находится ли серия значений в векторе с циклом for. р - PullRequest
0 голосов
/ 09 января 2019

Я хочу классифицировать значения в зависимости от того, находятся ли они в векторе. Я пробовал то, что кажется каким-то образом, и это продолжает не работать.

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")

У меня проблемы с перехватом значений моим фильтром, я не уверен, как еще сравнить, равно ли значение одному из значений в векторе.

1 Ответ

0 голосов
/ 09 января 2019

Вы можете использовать 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...