r - 查找所有变量对之间的相交长度
问题描述
我有一个大型数据集(大约 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))),]
解决方案
您可以使用和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
推荐阅读
- amazon-ec2 - Rails 6.0.2 App 需要什么配置才能部署在 AWS EC2 实例中?
- react-native - 使用 axios 上传文件时的问题
- javascript - MapBoxGL Draw:为什么我可以看到值时未定义事件的“FeatureTarget”?
- python - 在django rest框架中执行serializer.save()时如何更新模型对象,只有一个字段数据?
- mysql - 如何从 MySQL 数据库中获取用户数据并使用 Microsoft Bot Framework?
- java - Jenkins期间连接断开(主从结构)
- wordpress - 当执行以下钩子'wp_ajax_'时?
- python - 这是 Python 中的高效计算器吗?
- reactjs - 在 npm 包中使用 styled-component 时出现奇怪的问题
- javascript - Redux 程序 - 以下代码的输出未在 VS Code 终端中打印。没有错误但未打印输出