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

标签 r intersect

我有一个大型数据集(大约 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 上搜索其他查询,我还尝试首先创建一个包含所有可能的列对的数据框,但我不知道如何真正使我的输出与我的原始列名称匹配,然后应用相交功能。

N <- ncol(data)
combos <- expand.grid(1:N,1:N) %>%
  filter(!Var1==Var2)
combos <- combos[!duplicated(t(apply(combos[1:2], 1, sort))),]

最佳答案

您可以使用 combn 创建列名称的组合,并使用 lengthintersect 计算它们之间的公共(public)值。

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 

关于r - 查找所有变量对之间的相交长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64736772/

相关文章:

c# - 在 C# 中将 2 个 Xml 文件与 XDocument 相交

减少 R 中 ggplot 的主轴和 CI

java - 抑制控制台中的 rjava 错误输出

r - 根据它们的关系对 r 中的对象进行排序

r - 使用时间序列交叉验证模仿 createFolds

sql - 如何用 R 分析维基百科文章数据库?

SQL 子查询替代 INTERSECT

sql - 使用 INTERSECT 的 SELECT 语句

c# - LINQ 相交但将结果添加到新列表

java - 数组相交方法中的空指针(java)