R 将data.table与by参数连接

R 将data.table与by参数连接,r,data.table,R,Data.table,我有两个数据。表dx和dy dx <- data.table(a = c(1,1,1,1,2,2), b = 3:8) dy <- data.table(a = c(1,1,2), c = 7:9) 但是,我无法仅使用数据的[]内部的操作进行输出。表或合并?我累了 merge(dx, dy, by = "a", all = TRUE) vecseq(f_uuu,len_uu,if(allow.cartesian | | | notjoin | | | |!anyDuplicate

我有两个数据。表
dx
dy

dx <- data.table(a = c(1,1,1,1,2,2), b = 3:8)
dy <- data.table(a = c(1,1,2), c = 7:9)
但是,我无法仅使用
数据的
[]
内部的操作进行输出。表
合并
?我累了

merge(dx, dy, by = "a", all = TRUE)
vecseq(f_uuu,len_uu,if(allow.cartesian | | | notjoin | | | |!anyDuplicated(f_uuu,:) 将结果合并为10行;超过9行=nrow(x)+nrow(i).检查i中是否存在重复的键值,每个键值都会一次又一次地加入x中的同一个组。如果没有问题,请尝试by=.EACHI为每个组运行j以避免较大的分配。如果确实要继续,请使用allow.cartesian=TRUE重新运行。否则,请在常见问题解答、Wiki、堆栈溢出和datatable中搜索此错误消息-帮助寻求建议。

dy[dx,on="a"]
dx[, merge(dy, by = "a"), by = c("a", "b")]
vecseq(f_uuu,len_uu,if(allow.cartesian | | | notjoin | | | |!anyDuplicated(f_uuu,:) 将结果合并为10行;超过9行=nrow(x)+nrow(i).检查i中是否存在重复的键值,每个键值都会一次又一次地加入x中的同一个组。如果没有问题,请尝试by=.EACHI为每个组运行j以避免较大的分配。如果确实要继续,请使用allow.cartesian=TRUE重新运行。否则,请在常见问题解答、Wiki、堆栈溢出和datatable中搜索此错误消息-帮助寻求建议。

dy[dx,on="a"]
dx[, merge(dy, by = "a"), by = c("a", "b")]
is.data.table(y)中出错:缺少参数“y”,没有默认值

dx[, merge(.SD, dy, by = "a"), by = c("a", "b")]
merge.data.table(.SD,dy,by=“a”)中出现错误:
by
中列出的元素必须是x和y中的有效列名

我该怎么做呢


谢谢!

如果我正确理解了您的要求,您可以使用直接合并选项

dx <- data.table(a = c(1,1,2,2), b = 3:6)
dy <- data.table(a = c(1,1,2), c = 7:9)
merge(x = dx, y = dy, by = "a", all = TRUE)

dx由于存在多个1,因此会出现错误。在默认合并中,即data.frames的实现,默认情况下,
allow.cartesian=TRUE
。但在data.table实现中,情况并非如此。因此,如果运行以下代码,它将为您提供合并输出

merge(dx, dy, by = "a", all = TRUE, allow.cartesian=TRUE)

上面的代码将为您提供所需的输出。

请尝试
dy[dx,on=“a”]
@nicola我已修改了我的问题。很抱歉,错误消息会准确地告诉您如何继续。“如果您确定要继续,请使用allow.cartesian=TRUE重新运行”的哪一部分你不明白吗?你是对的,我应该更仔细地阅读错误消息。谢谢!但我刚刚修改了我的问题。请尝试此命令,希望它可以解决你的问题dx[dy,allow.cartesian=TRUE]