繁体   English   中英

笛卡尔滚动与data.table连接

Cartesian rolling join with data.table

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我不确定如何描述这个,但我很乐意编辑标题和/或帖子以反映评论和答案。

问题

我有两个data.frames ,我想与左连接,外连接和滚动连接的组合合并。

  • 其中一个关键列( year )是滚动连接。
  • 另一个关键列( cat )对于两个data.frames都是data.frames 在下面的示例中,我仅提供了完整数据的示例性子集,其中包含数千个cat值。
  • 第一个data.frameX ,有一个额外的键列cnty (county),第二个data.frameY ,有一个额外的键列pol (污染物)。
  • 对于由catyear定义的每个组,我希望最终结果包含cntypol的笛卡尔积,其值为emfac (来自X )和tput (来自Y )。 目标是能够计算emfac * tput

这是X的示例性子集:

  cat year cnty  tput
1  29 2011  ALA 67852
2  29 2011   CC 33893
3  29 2011  MRN 11319

......这里是Y的示例性子集:

  cat year pol emfac
1  29 1975 TOG   2.4
2  29 1975  PM   5.3

到目前为止最近的尝试

我几乎可以,但不完全,得到我想要的输出:

X <- structure(list(
       cat = c(29L, 29L, 29L), 
       year = c(2011L, 2011L, 2011L), 
       cnty = c("ALA", "CC", "MRN"), 
       tput = c(67852, 33893, 11319)), 
       .Names = c("cat", "year", "cnty", "tput"), 
       class = c("data.frame"), row.names = c(NA, -3L))

Y <- structure(list(
       cat = c(29L, 29L), 
       year = c(1975, 1975), 
       pol = c("PM", "TOG"), 
       emfac = c(2.4, 5.3)),
       .Names = c("cat", "year", "pol", "emfac"), 
       class = c("data.frame"), row.names = c(NA, -2L))

library(data.table)
X <- data.table(X, key = c("cat", "cnty", "year"))
Y <- data.table(Y, key = c("cat", "pol", "year"))
Y[X, roll = TRUE]

   cat year pol emfac cnty  tput
1:  29 2011  PM   5.3  ALA 67852
2:  29 2011  PM   5.3   CC 33893
3:  29 2011  PM   5.3  MRN 11319

这是我“最近的错过”。 我的大多数其他尝试都错了。

预期结果

   cat year pol emfac cnty  tput
1:  29 2011  PM   5.3  ALA 67852
2:  29 2011  PM   5.3   CC 33893
3:  29 2011  PM   5.3  MRN 11319
4:  29 2011 TOG   2.4  ALA 67852
5:  29 2011 TOG   2.4   CC 33893
6:  29 2011 TOG   2.4  MRN 11319

我究竟做错了什么?

问题暂未有回复.您可以查看右边的相关问题.
1 data.table 中的笛卡尔连接

我正在尝试使用 data.table 进行完整的笛卡尔连接,但运气不佳。 代码: 预期输出: 我试过merge(a,b,allow.cartesian=TRUE)但它给了我以下错误 - " Error in merge.data.table(a, b, allow.cartesian ...

2 使用Data.table进行笛卡尔滚动联接

我有两个表: dat:包含数据 日期:包含日期表 我追求的结果如下。 即与dat的每一行进行滚动连接,然后合并结果。 我的实际数据集要大得多,因此列出dat的每一行是不实际的。 有没有捷径可做,却没有循环? ...

3 data.table笛卡尔加入合法连接的警告

我很抱歉提前发帖混淆了几个问题。 如果不合适,请编辑或建议我应该做什么。 我正在练习data.table join,这是一个想象的场景: “两个机器人,每个机器人在MovementA有4个位置,在MovementB有4个位置。问题解决:对于每个机器人,从MoveA到MoveB,有4x4 ...

4 用data.table将表的一半与笛卡尔连接

假设我有以下data.table: 我想执行笛卡尔联接以将权重应用于“数量”列,例如我有下表的权重: 一种获得我想要的方法是: 编辑:我同事的一项改进,这是对第一项的改进,但对性能没有太大的作用: 导致: 我想知道/改善两件事: 如果列数增加,则 ...

5 data.table矩阵乘法-笛卡尔积

因此,我不得不考虑以data.table列为中心的方法,并且我认为如果不为了进行矩阵乘法而放弃,而是以列为单位进行整体操作并查看数据方式,那将很有趣。表格与%*%相加。 但是,为了进行真正的比较,您必须做对。 我想出了(据我所知)最简单的方法: 这给出了正确的结果,但是比ac ...

6 使用data.table包的笛卡尔积

使用R中的data.table包,我试图使用merge方法创建两个data.tables的笛卡尔积,就像在基数R中一样。 在基础上,以下工作: 但是,使用data.table相同的技术不起作用,并抛出此错误: 我希望结果反映所有日期的所有客户名称,就像在ba ...

7 通过过滤加速data.table笛卡尔积

给定一个data.table其中包含三个字段member_id , provider_id和srvc_dt 。 我需要计算一对提供者看到的不同成员的数量。 据说,如果访问发生在180天内,则会员访问过两家提供商。 这用于使用#visits的阈值构建无向图并查找连接的组件。 我正在使用 ...

8 滚动连接R中的data.table

我试图更多地了解滚动连接的工作方式并且有一些混乱,我希望有人可以为我澄清这一点。 举一个具体的例子: 我预计中产生长data.table其中值dt2被卷: 相反,正确的方法似乎是: 有人可以向我解释一下如何加入data.table因为我显然没有正确理解它。 我认为dt ...

9 R/data.table:部分滚动连接

我有以下数据结构: 其中Date有一些缺失的 ID-wise 条目,其中Val == 0和MiscInfo表示一组N &gt; 50属性变量。 我的最终目标是填补缺失的条目,从而获得以下结构。 从类似的请求来看,滚动连接是实现这一目标的不错途径。 我遇到的问题是无法选择要滚动的列,如下所述: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM