R 查找所有变量对之间的相交长度

R 查找所有变量对之间的相交长度,r,intersect,R,Intersect,我有一个大的数据集(大约130列),看起来像这样: data <- data.frame(AA = c("Apple", "Banana", "0", "Cherry", "0"), AB = c("0", "0", "Apple", "Cherry", "0&qu

我有一个大的数据集(大约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))),]

N您可以使用
combn
创建列名的组合,并使用
length
intersect
计算它们之间的公共值

val <- combn(names(data), 2, function(x) 
             length(intersect(data[[x[1]]], data[[x[2]]])))

names(val) <- combn(names(data), 2, paste0, collapse =  '_')
val
#AA_AB AA_AC AA_AD AB_AC AB_AD AC_AD 
#    3     2     3     2     2     2 
val