我想知道是否有一种简单的方法来识别与另一个变量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。
但这现在看起来像是一个兔子洞,我当然认为有一种更简单的方法! 谢谢你的任何建议!
答案 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)