R因子变量之间的相关性

时间:2017-11-02 14:50:23

标签: r compare correlation

我想知道是否有一种简单的方法来识别与另一个变量100%相关的字符/因子变量。因此,在该示例中,该过程将匹配颜色'和' vehicle'以及' plant'和'身高'

color <- c('black', 'black', 'blue', 'blue', 'yellow')
vehicle <- c('truck', 'truck', 'car', 'car', 'bike')
plant <- c('tree', 'flower', 'grass', 'tree', 'flower')
height <- c('tall', 'medium', 'short', 'tall', 'medium')

df <- as.data.frame(cbind(color, vehicle, plant, height))

目前,我得到因子的级别数并运行相关矩阵并拉出相关性为1的对(除了自我对)。

包比较有效:

library(tidyverse)
library(compare)

f <- function(x) factor(x, levels= unique(x))

f.df <- as.tibble(df) %>%
  mutate_if(is.character, f) %>%
  mutate_if(is.factor, as.numeric) 

compare(f.df$color, f.df$vehicle)
compare(f.df$color, f.df$plant)

要获得测试的相关性:

cor <- cor(f.df)

cor[lower.tri(cor)] <- 0

vars.corr <- data.frame(cor) %>%
  mutate(var1= rownames(.)) %>%
  select(var1, everything()) %>%
  gather(var2, val, -var1) %>%
  filter(var1!= var2) %>%
  filter(val > .99)

但是我正在努力应用比较函数使用map(purrr)迭代变量对(vars.corr中的var1和var2),或编写函数并正确应用enquo来读取变量从列表中并适用于f.df。

但这现在看起来像是一个兔子洞,我当然认为有一种更简单的方法! 谢谢你的任何建议!

1 个答案:

答案 0 :(得分:0)

对于个人对:

perfect_cor <-   function (var1, var2) {
  all(rowSums(as.matrix(table(df[[var1]], df[[var2]])) > 0) == 1)
}
perfect_cor <- Vectorize(perfect_cor) # necessary for using `outer`

将其应用于所有对:

outer(names(df), names(df), perfect_cor)