区分大小写删除 R 中 cor() 内的值
Case wise delete of values inside cor() in 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
。
换句话说,我想删除 V1:V9
的任何值 > 3
和 V10
的任何值 > 2
的相同删除22=]函数。
这类似于use参数?
我设法解决这个问题的唯一方法是将这些值突变为 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。当然,还有更合适的方法来计算序数变量之间的相关性。
这个问题的答案比我想象的要简单。
正如@zx8754 指出的那样,在为分类变量选择相关方法时应该小心。
无论如何,您只需在 cor()
中更改 use = "pairwise.complete.obs"
但是,您仍然需要将 4 变异为 NA
。
考虑以下调查数据:
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
。
换句话说,我想删除 V1:V9
的任何值 > 3
和 V10
的任何值 > 2
的相同删除22=]函数。
这类似于use参数?
我设法解决这个问题的唯一方法是将这些值突变为 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。当然,还有更合适的方法来计算序数变量之间的相关性。
这个问题的答案比我想象的要简单。
正如@zx8754 指出的那样,在为分类变量选择相关方法时应该小心。
无论如何,您只需在 cor()
use = "pairwise.complete.obs"
但是,您仍然需要将 4 变异为 NA
。