我不确定如何描述这一点,但我很乐意编辑标题和/或帖子以反映评论和答案。
问题
我有两个data.frames
我希望与左连接,外连接和滚动连接的组合合并。
year
)用于滚动连接。cat
)对data.frames
都是通用的。在下面的示例中,我仅提供了完整数据的示例性子集,其具有数千个cat
的值。 data.frame
,X
有一个额外的键列cnty
(县),第二个data.frame
,Y
有一个额外的键栏pol
(污染物)。 cat
和year
定义的每个群组,我希望最终结果包含cnty
和pol
的笛卡尔积,其值为{{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
我做错了什么?