我正在尝试使用 data.table 进行完整的笛卡尔连接,但运气不佳。 代码: 预期输出: 我试过merge(a,b,allow.cartesian=TRUE)但它给了我以下错误 - " Error in merge.data.table(a, b, allow.cartesian ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我不确定如何描述这个,但我很乐意编辑标题和/或帖子以反映评论和答案。
问题
我有两个data.frames
,我想与左连接,外连接和滚动连接的组合合并。
year
)是滚动连接。 cat
)对于两个data.frames
都是data.frames
。 在下面的示例中,我仅提供了完整数据的示例性子集,其中包含数千个cat
值。 data.frame
, X
,有一个额外的键列cnty
(county),第二个data.frame
, Y
,有一个额外的键列pol
(污染物)。 cat
和year
定义的每个组,我希望最终结果包含cnty
和pol
的笛卡尔积,其值为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
我究竟做错了什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.