Удаление значений внутри cor() в R с учетом регистра

Рассмотрим следующие данные опроса:

data <- replicate(10 ,sample(c(1,2,3,4), 1000, replace = TRUE)) %>%
  as.data.frame()

V1:V9 переменные где 1 = "Good", 2 = "Okey" а также 3 = "Not Good" а также 4 = "Don't know" в то время как V10 порядковая переменная, где 1 = "Good", 2 = "Not good", 3 = "Don't know" а также 4 = "Don't want to answer",

Я заинтересован в расчете простой корреляционной матрицы с использованием cor() на этих переменных. Тем не менее, я хочу рассчитать его только между значениями, которые на самом деле что-то значат То есть, 1,2,3 за V1:V9 а также 1,2 за V10,

Другими словами, я хочу удалить любое значение с учетом регистра. > 3 за V1:V9 и то же самое для любых значений > 2 за V10 в пределах cor() функция.

Это было бы похоже на аргумент использования?

Единственный способ, которым мне удалось решить эту проблему, это изменить эти значения как NA.

library("dplyr")
data_test <- data_test %>%
      mutate_each(funs(ifelse(. > 3, NA, .)), -V10) %>%
      mutate(ifelse(V10 > 2, NA, V10))

cor(data_test, use = "complete.obs")

Но есть ли лучший способ, который не обязательно полагаться на изменение данных.

PS. Есть, конечно, более адекватные способы расчета корреляции между порядковыми переменными.

1 ответ

Решение

Ответ на этот вопрос был более простым, чем я думал.

Как указывает @zx8754, вы должны быть осторожны при выборе метода корреляции для категориальных переменных.

В любом случае, вы просто измените use = "pairwise.complete.obs" в cor()

Тем не менее, вам все еще нужно изменить 4 на NA,

Другие вопросы по тегам