Удаление значений внутри 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
,