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

问题

我有两个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

我究竟做错了什么?

  ask by dholstius translate from so

本文未有回复,本站智能推荐:

2回复

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

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

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

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

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

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

滚动连接R中的data.table

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

Data.Table按组滚动连接

如何在test.day之前找到每个( loc.x , loc.y )对的最后一个值? 所需输出:
1回复

使用data.table滚动窗口和自连接

我有一个时间序列数据集,该数据集需要自我加入才能检查每个客户自观察之日起12个月的最大“到期天数”(DPD)。 样本数据如下所示 Dplyr解决问题的方法如下所示 但是我使用的数据集有1500万行,我想知道是否有更有效的data.table解决方案。 所需的解决方案如下所
1回复

R,data.table,滚动连接不匹配最接近的值

我绝不是R专家,非常感谢您的帮助! 我有两个data.tables。 下面的示例仅包括单个团队从第一个区块开始的第一个试验(的一部分),实际数据具有多个团队,区块和试验。 对于每个试用,“时间”列始终从0开始。 完整的eyeDatP1和eyeDatP2表可在此处和此处找到 '
1回复

使用重复键在 data.table 上滚动连接

我正在尝试了解data.table rolling joins 。 最后给出了重现这一点的数据。 给定一个指定时间在机场的交易数据表: (注意t_ids 1 和 3 具有相同的机场和时间) 以及从机场起飞的航班查找表: 我想将所有交易与从该机场起飞的所有下一个可能的航班相匹配,以给出: