总结自连接索引,同时避免 R data.table 中的笛卡尔积

2023-12-07

有 2 列data.table,我想通过对第 2 列中的共享元素数量求和来总结第 1 列中的成对关系。换句话说,X 值的每个成对组合有多少个共享 Y 元素?

例如,我可以通过两步过程来完成此操作,首先进行笛卡尔交叉连接,然后总结如下:

d = data.table(X=c(1,1,1,2,2,2,2,3,3,3,4,4), Y=c(1,2,3,1,2,3,4,1,5,6,4,5))
setkey(d, Y)
d2 = d[d, allow.cartesian=TRUE]
d2[, .N, by=c("X", "i.X")]
 #  X i.X N
 #1: 1   1 3
 #2: 2   1 3
 #3: 3   1 1
 #4: 1   2 3
 #5: 2   2 4
 #6: 3   2 1
 #7: 1   3 1
 #8: 2   3 1
 #9: 3   3 3
#10: 4   2 1
#11: 2   4 1
#12: 4   4 2
#13: 4   3 1
#14: 3   4 1

该结果的第二行表明,X=1共享 3 个 Y 值X=2; while X=3仅共享 1 个 y 值X=4.

有没有办法在绕过笛卡尔连接步骤的同时执行此操作,这会导致大型低效表?我想在一个有数百万行的表上做这样的事情,笛卡尔连接遇到了2^31向量大小限制(除了变得缓慢之外)。

我正在想象这样的事情:

d[d, list(X, length(Y)), by=c("X", "i.X")]

但这给出了错误i.X not found

我可以使用下面的代码在 SQL 中执行此操作 - 但只是不知道如何将其转换为 data.table 语法:

CREATE TABLE test (X integer, Y integer);
INSERT INTO test VALUES(1, 1);
INSERT INTO test VALUES(1, 2);
INSERT INTO test VALUES(1, 3);
INSERT INTO test VALUES(2, 1);
INSERT INTO test VALUES(2, 2);
INSERT INTO test VALUES(2, 3);
INSERT INTO test VALUES(2, 4);
INSERT INTO test VALUES(3, 1);
INSERT INTO test VALUES(3, 5);
INSERT INTO test VALUES(3, 6);
INSERT INTO test VALUES(4, 4);
INSERT INTO test VALUES(4, 5);

SELECT A.X, B.X, COUNT(A.Y) as N FROM test as A JOIN test as B WHERE A.Y==B.Y GROUP BY A.X, B.X;

重点是我要总结的专栏和我加入的专栏是一样的。这个问题与这些类似,但不完全一样:

R Data.Table 条件连接

如何根据条件自连接 data.table

关键的区别是我想要总结索引列,这似乎不可能用 by=.EACHI 来完成。


如果你可以分割你的Y分成没有大交集的组X的,您可以首先按这些组进行计算,从而得到较小的中间表:

d[, grp := Y <= 3] # this particular split works best for OP data
d[, .SD[.SD, allow = T][, .N, by = .(X, i.X)], by = grp][,
    .(N = sum(N)), by = .(X, i.X)]

上面的中间表只有 16 行,而不是 26 行。不幸的是,我想不出一种简单的方法来自动创建此类分组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

总结自连接索引,同时避免 R data.table 中的笛卡尔积 的相关文章

  • 将多个对齐的绘图放置在一页上时避免浪费空间

    我想将四个图放在一个页面上 轴标签应仅打印在最边缘 即x仅用于底部图表的轴标签 以及y仅左图的轴标签 这既适用于整个轴的名称 也适用于各个刻度线 我可以使用以下代码生成一些内容 pdf file ExampleOutput pdf widt
  • 如何在Shiny中默认选择verbatimTextOutput中的文本?

    这是与我之前的问题相关的问题 是否可以有固定宽度的 verbatimTextOutput 并让文本在 Shiny 中换行 https stackoverflow com q 58516071 7669809 我有以下闪亮的应用程序 http
  • R 因子变量之间的相关性

    我想知道是否有一种简单的方法来识别与另一个变量 100 相关的特征 因子变量 因此 在示例中 该过程将匹配 颜色 和 车辆 以及 植物 和 高度 color lt c black black blue blue yellow vehicle
  • 在for循环中重命名ggplot2图

    我有一个关于在 for 循环中创建 ggplot2 图表 根据迭代重命名它们 然后在网格中排列图表的问题 我想做类似这个虚拟示例的事情 library ggplot2 a c 1 2 3 b c 4 5 6 for i in c 1 5 x
  • Foreach循环无法找到对象

    我正在尝试将 foreach 与并行后端结合使用来加速计算 用于特征选择的 AUCRF 随机森林的交叉验证 如果这确实重要的话 在这样做的过程中 我需要获取向量的子集 向量的名称可以更改 但可以作为字符向量进行访问 我使用 eval par
  • 如何在 sqlSave() 命令中跳过主键?

    我正在尝试使用 RODBC 在 MySQL 数据库中插入 data frame 我正在使用的命令如下 sqlSave channel dbData tablename table name append TRUE safer TRUE fa
  • ggplot:按组自动化的百分位线

    我找到了dplyr gt 运算符有助于简单的 ggplot2 转换 无需求助于ggproto 这是必需的ggplot2 扩展 http docs ggplot2 org dev vignettes extending ggplot2 htm
  • 来自 data.frame 每一列的随机样本

    我想从 a 的每一行中抽取随机样本data frame独立于其他行 这是一个例子 此代码为每行选择相同的列 但我需要为每行独立选择列 library plyr set seed 12345 df1 lt mdply data frame m
  • 从 R 主题模型中的 DocumentTermMatrix 中删除空文档?

    我正在使用 R 中的 topicmodels 包进行主题建模 我正在创建一个 Corpus 对象 进行一些基本的预处理 然后创建一个 DocumentTermMatrix corpus lt Corpus VectorSource vec
  • 在 for 循环中绘制的多个 ggplot2 绘图的网格

    作为一个新的 ggplot2 用户 我对可能性的数量感到有点迷失 并且很难在网上找到我认为简单问题的简单答案 我想在同一张纸上显示 ggplot2 的多个图 但知道这些图来自 for 循环 以下示例无法编译 仅用于说明 for i in c
  • 尽管提供了群落矩阵,纯素食 DBRDA 物种得分为空

    我使用纯素社区生态包在 R 中执行了 基于距离的冗余分析 dbRDA 我想在 dbRDA 结果的排序图中显示 鱼类 营养群体对样本之间差异 营养级鱼类组合的丰度数据 的相对贡献 IE 将箭头和营养级组名称叠加到排序图上 其中箭头线的长度表示
  • profvis() 何时以及为何显示“源不可用”?

    我经常分析 R 代码 并大量使用 profvis 对于某些函数 浏览器窗口的上半部分会显示源代码 有时则不会 我不知道什么时候会出现这种情况 对我来说这似乎是随机的 有谁知道 profvis 何时以及为什么无法在顶部窗口中显示代码 发生这种
  • 在 R 中读取 Stata 13 文件

    有没有办法在 R 中读取 Stata 版本 13 数据集文件 我尝试执行以下操作 gt library foreign gt data read dta TEAdataSTATA dta 但是 我收到一个错误 read dta TEAdat
  • 在 Shiny 中使用 readlines(prompt = )

    我有一个代码 使用以下方式获取输入readlines prompt 功能 您能告诉我 Shiny 中的哪个输入函数足以将此代码适应 Shiny 应用程序吗 我需要一个交互功能 我无法使用简单的输入selectInput 因为我有很多read
  • R 中大型稀疏矩阵的聚类分析

    我有一个包含 250000 笔交易 行 和 2183 项 列 的交易数据集 我想将其转换为稀疏矩阵 然后对其进行分层聚类 我尝试了包 sparcl 但它似乎不适用于稀疏矩阵 关于如何解决这个问题有什么建议吗 或者我可以使用任何其他包对稀疏矩
  • 包检查时如何有效处理未压缩的保存?

    在最近开发一个包的过程中 我将数据集包含在data 我的包的文件夹 在我的具体情况下 我有 5 个数据集 所有这些数据集都位于data table格式 尽管我在下面描述的问题仍然存在 如果我将它们保留为data frame 我已将每个人单独
  • 有效地将环境从内部功能转移到全局环境

    我有一个在其中创建环境的函数 我希望将该环境分配给全局环境 目前我通过将环境分配给来做到这一点globalenv 作为最后一步 如下 funfun lt function inc 1 dataEnv lt new env dataEnv d
  • glm() 模型的交叉验证

    我正在尝试对我之前在 R 中构建的一些 glm 模型进行 10 倍交叉验证 我对cv glm 函数在boot包 尽管我已经阅读了很多帮助文件 当我提供以下公式时 library boot cv glm data glmfit K 10 这里
  • 使用 ggplotly(ggplot2 withplotly)时可以去掉注释中的跟踪标签吗?

    使用ggplotly时是否可以删除注释中的跟踪标签 例如 library ggplot2 library plotly g lt ggplot iris aes Sepal Width Sepal Length geom point ann
  • 仅在具有重复块名称的另一个 Rmarkdown 文档中运行一个 Rmarkdown 文档中的代码

    我正在 Rmarkdown 中编写一系列相互补充的报告 我想将上一份报告的结果纳入我目前正在编写的报告中 我看到其他建议使用的问题purl从 Rmarkdown 文档中提取 R 代码然后运行它 所以我尝试了以下操作 r read previ

随机推荐

  • d3 单击圆圈暂停并恢复标记沿线的过渡

    我希望帮助纠正我的代码 单击标记圆圈元素以暂停或恢复该元素沿线的转换 我的代码沿一条线移动标记 我可以使用单击按钮元素来暂停和恢复此转换 但我希望能够单击标记圆圈本身 而不是按钮 我使用了各种参考资料 包括 http www nytimes
  • 如何在 PHP 中添加 href 链接? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我对 PHP 很陌生 并试图即时更新网站 我需要更新代
  • Python - Sqlite插入没有自动增量主键值的元组

    我创建一个带有主键和自动增量的表 with open RAND xml rb as f sqlite3 connect race db as connection c connection cursor c execute CREATE T
  • 计算多列每个字母的频率[重复]

    这个问题在这里已经有答案了 我有一个数据框如下 gt dfnew C1 C2 C3 C4 C5 C6 1 A A G A G A 2 A T T T G G 3 T A G A T A 4 C A A A A G 5 C A T T T C
  • SQLite iOS 插入数据

    我试图将一个名称插入到我的 sqlite 文件中 我正在使用此代码 但它不起作用 void InsertRecords NSMutableString txt if addStmt nil const char sql INSERT INT
  • 我需要使用 { get; 吗?放; } 具有在获取和设置时没有特殊操作的 C# 字段

    我一直在编写这样的类 public class ReportViewModel public string Status public string DataSource public String DataStore get set pu
  • 无限重复列表(用无限重复序列压缩有限列表)

    UserList是一个字典列表 例如 Name Alex Age 25 Name Peter Age 35 Name Muhammad Age 28 Name Raul Age 29 RowColorList是一个颜色列表 bcf fc0
  • 原型回调函数吞掉异常

    使用原型版本 1 6 0 2 我有一个常见的问题 异常在回调函数中抛出时被吞没 通常是当我尝试处理对Ajax Request称呼 这是一个简单的例子 HTML 标记
  • 如何在 UWP 应用中从不同的 URL 播放视频和音频?

    我正在尝试为 UWP 桌面应用程序创建视频播放器 我无法播放来自不同 URL 的视频和音频 我在下面给出了我的代码 但没有给出音频和视频 URL 我正在使用一个Xampp我的案例的本地服务器 请帮我 My MainPage xaml cs
  • 找不到appcompat_v7.apk

    当我尝试运行我的程序时 它可以工作 但是当我查看控制台时 它表明它Could not find appcompat v7 apk 我该如何尝试回答这个问题 我刚刚导入了大部分资源 当我这样做时会发生以下情况 Properties gt An
  • 配置 tomcat 仅针对特定 URL 模式进行客户端身份验证

    我有一个应用程序 其中有几个 war 文件 全部部署在同一个 tomcat 服务器上 我需要仅针对一个战争上下文强制客户端身份验证 并且仅针对特定 URL 我在网上阅读了很多内容并在这里阅读了类似的问题 但我得出的结论与我需要的解决方案不匹
  • Pycharm - 在 Django 控制台中自动加载模型

    有没有办法在 pycharm django 控制台中自动加载模型 与 django extensions shell plus 的工作方式类似 在pycharm设置 django控制台设置中你可以有一个启动脚本 这将自动加载 django
  • 函数的运行时间

    我想打印我的函数的运行时间 由于某种原因 我的计时器总是返回 0 谁能告诉我为什么 double RunningTime clock t time1 clock t time2 double t time1 time2 double tim
  • 检查待处理的呼叫

    我想知道是否有任何方法可以检查是否有任何待处理的调用将在某个时刻执行 例如来自 AJAX 请求或计时器的回调 setTimeout 比如检查正在运行 JavaScript 的引擎的整个堆栈 考虑到 AJAX 回调依赖于服务器响应 成功 失败
  • 为什么我可以在 gcc 上声明一个具有预定大小的数组,但不能在 Visual Studio C++ 上声明?

    我想知道为什么我可以在 linux 中执行此代码 但不能在 Visual Studio 上执行 文件 gt main c int size printf Size scanf d size int vec size 和c89或者c99标准有
  • 根据闪亮应用程序的rhandsontable中其他单元格的修改来更改单元格

    我正在尝试构建一个闪亮的应用程序 其中包含rhandsontable 该 rhandsontable 基于我在应用程序内创建的数据帧 在应用程序中 我最初显示该数据框的第一行和 3 列 当第一列的值通过其下拉级别列表修改并按搜索时 其他两列
  • Spring Boot / Spring LDAP 获取用户的memberof列表

    我想通过从如下结构的 LDAP 存储库查询用户 ID 来获取用户属性列表 dn uid E000001 ou People o Company o Internal cn BOB DOLE statusid active memberof
  • 如何在 SAPUI5 的控制器中使用内部化 i18n?

    谁能解释一下如何使用i18n中的文本setValueStateText控制器中的方法 oTP setValueStateText i18n gt co Maximal 60 h 对话框中的错误消息仅显示 i18n gt co Maximal
  • LibreOffice 命令行转换 - 没有输出文件?

    我正在使用安装在我的 Linux 机器上的 LibreOffice 我似乎遇到了一个奇怪的问题 转换似乎正在进行 并且似乎没有错误 但指定的输出目录中没有输出文件 这是我正在使用的命令的示例 opt libreoffice3 6 progr
  • 总结自连接索引,同时避免 R data.table 中的笛卡尔积

    有 2 列data table 我想通过对第 2 列中的共享元素数量求和来总结第 1 列中的成对关系 换句话说 X 值的每个成对组合有多少个共享 Y 元素 例如 我可以通过两步过程来完成此操作 首先进行笛卡尔交叉连接 然后总结如下 d da