我有两个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)
我想将dy
加入dx
的每一行,以下是所需的输出
data.table(plyr::ddply(dx, c("a", "b"), function(d) merge(d, dy, by = "a")))
a b c
1: 1 3 7
2: 1 3 8
3: 1 4 7
4: 1 4 8
5: 1 5 7
6: 1 5 8
7: 1 6 7
8: 1 6 8
9: 2 7 9
10: 2 8 9
但是,我无法仅使用[]
或data.table
的{{1}}内的操作进行输出?我累了
merge
vecseq中的错误(f __,len __,if(allow.cartesian || notjoin ||!anyDuplicated(f__,: 将结果加入10行;超过9 = nrow(x)+ nrow(i)。检查i中的重复键值,每个键值一次又一次地连接到x中的同一组。如果没关系,请尝试= .EACHI为每个组运行j以避免大量分配。如果您确定要继续,请使用allow.cartesian = TRUE重新运行。否则,请在FAQ,Wiki,Stack Overflow和datatable-help中搜索此错误消息以获取建议。
merge(dx, dy, by = "a", all = TRUE)
vecseq中的错误(f __,len __,if(allow.cartesian || notjoin ||!anyDuplicated(f__,: 将结果加入10行;超过9 = nrow(x)+ nrow(i)。检查i中的重复键值,每个键值一次又一次地连接到x中的同一组。如果没关系,请尝试= .EACHI为每个组运行j以避免大量分配。如果您确定要继续,请使用allow.cartesian = TRUE重新运行。否则,请在FAQ,Wiki,Stack Overflow和datatable-help中搜索此错误消息以获取建议。
dy[dx,on="a"]
is.data.table(y)出错:缺少参数“y”,没有默认值
dx[, merge(dy, by = "a"), by = c("a", "b")]
merge.data.table(.SD,dy,by =“a”)出错:
dx[, merge(.SD, dy, by = "a"), by = c("a", "b")]
中列出的元素必须是x和y中的有效列名
我怎么能这样做?
谢谢!
答案 0 :(得分:8)
由于多个1,错误即将来临。在默认合并中,即data.frames的实现,默认为allow.cartesian=TRUE
。但是在data.table实现中,情况并非如此。因此,如果您运行以下代码,它将为您提供合并输出。
merge(dx, dy, by = "a", all = TRUE, allow.cartesian=TRUE)
上面的代码将为您提供所需的输出。
答案 1 :(得分:1)
如果,我理解你的要求,你可以使用直接合并选项,
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)
它提供了您提到的所需输出。 How to join (merge) data frames (inner, outer, left, right)?
如果没有,我希望它能清除你的怀疑,我是太棒了。