У меня есть большой набор данных (около 130 столбцов), который выглядит так:
data <- data.frame(AA = c("Apple", "Banana", "0", "Cherry", "0"),
AB = c("0", "0", "Apple", "Cherry", "0"),
AC = c("0", "0", "0", "0", "Cherry"),
AD = c("Cherry", "0", "0", "Banana", "0"))
Может ли кто-нибудь помочь мне найти количество точных совпадений между всеми возможными парами столбцов? Вывод должен выглядеть примерно так:
> output
AA_AB AA_AC AA_AD AB_AC AB_AD AC_AD
3 2 3 2 2 2
Я пытался использовать length(intersect(data$AA, data$AB))
, но не знаю, как применить это ко всему набору данных в рамках одной команды. Из поиска других запросов в Stackoverflow я также попытался сначала создать фрейм данных со всеми возможными парами столбцов, но я не мог понять, как на самом деле заставить мой вывод соответствовать исходным именам столбцов, чтобы затем применить функцию intersect
.
N <- ncol(data)
combos <- expand.grid(1:N,1:N) %>%
filter(!Var1==Var2)
combos <- combos[!duplicated(t(apply(combos[1:2], 1, sort))),]