r - 计算一组分组节点之间的所有可能边
问题描述
我想计算一组给定的分组节点之间的所有可能的边。目前,我能够开发的唯一想法是作为分组交叉连接功能,出于性能和内存分配的原因,我想用 data.table 实现。我基本上想计算一个组内的所有潜在组合并遍历所有组。
对小型数据集使用 base R 和 dplyr 的经典方法如下所示:
library(dplyr)
IDs <- data.frame("Group" = c("A","B","A","A","B","B","A","B","B","B")
,"ID" = 1:10)
# note that I do not know the
CrossJoin <- merge(IDs,IDs, by=NULL) %>%
filter(Group.x == Group.y)
因此,我跨越了完整的 carthesian 产品,然后进行了过滤。这种方法的问题当然是如果 IDs 数据集变得更大,我们会遇到内存问题。
我知道提供相同结果的基本 data.table 功能:
library(data.table)
dtIDs <-as.data.table(IDs)
CrossJoinDT <- merge(dtIDs[, .(Group, ID)], dtIDs[, .(Group, ID)], by="Group", allow.cartesian = T)[ID.x != ID.y]
但是在更大的数据集上性能仍然很差。
结果应该与 in 相同,CrossJoin
但CrossJoinDT
对于更大的数据集性能更高。(n=100000
ID 中的条目)
谢谢你的帮助!
斯蒂芬
解决方案
推荐阅读
- json - Swift 中 JSON 的变量结构
- vba - 将所有单词转换为标题大小写,首字母缩略词除外
- javascript - 公式更新单元格时运行 Google 表格脚本
- javascript - 如何在使用 knex.js 删除约束之前检查约束是否存在
- macos - Mac 命令行:如何使用实际内容创建日期重命名所有图片
- c# - Xamarin 窗体编辑器 LineBreakMode
- css - 如何在css中将根类变量选择到另一个类中
- django - 在生产模式下使用 nginx 时如何返回 Django 项目的错误消息
- ios - 完成处理程序无法在 swift 中正常工作
- python - 如何在 python 中识别 C++ 的 char(255)?