笛卡尔滚动与data.table连接

时间:2015-01-14 18:30:02

标签: r join data.table

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

问题

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

  • 其中一个关键列(year)用于滚动连接。
  • 另一个关键列(cat)对data.frames都是通用的。在下面的示例中,我仅提供了完整数据的示例性子集,其具有数千个cat的值。
  • 第一个data.frameX有一个额外的键列cnty(县),第二个data.frameY有一个额外的键栏pol(污染物)。
  • 对于catyear定义的每个群组,我希望最终结果包含cntypol的笛卡尔积,其值为{{1} (来自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

我做错了什么?

0 个答案:

没有答案