【发布时间】:2016-04-01 06:38:56
【问题描述】:
我有两个 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 或merge 内的操作进行输出?我累了
merge(dx, dy, by = "a", all = TRUE)
vecseq(f__, len__, if (allow.cartesian || notjoin || !anyDuplicated(f__, : 连接结果为 10 行;超过 9 = nrow(x)+nrow(i)。检查 i 中的重复键值,每个键值都一遍又一遍地加入 x 中的同一组。如果没问题,请尝试 by=.EACHI 为每个组运行 j 以避免大量分配。如果您确定要继续,请使用 allow.cartesian=TRUE 重新运行。否则,请在 FAQ、Wiki、Stack Overflow 和 datatable-help 中搜索此错误消息以获取建议。
dy[dx,on="a"]
vecseq(f__, len__, if (allow.cartesian || notjoin || !anyDuplicated(f__, : 连接结果为 10 行;超过 9 = nrow(x)+nrow(i)。检查 i 中的重复键值,每个键值都一遍又一遍地加入 x 中的同一组。如果没问题,请尝试 by=.EACHI 为每个组运行 j 以避免大量分配。如果您确定要继续,请使用 allow.cartesian=TRUE 重新运行。否则,请在 FAQ、Wiki、Stack Overflow 和 datatable-help 中搜索此错误消息以获取建议。
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 中的有效列名
我该怎么做呢?
谢谢!
【问题讨论】:
-
试试
dy[dx,on="a"]。 -
@nicola 我已经修改了我的问题。
-
很抱歉,但错误消息会告诉您确切的操作方法。 “如果您确定要继续,请使用 allow.cartesian=TRUE 重新运行”的哪一部分。你不明白吗?
-
你是对的,我应该更仔细地阅读错误信息。
标签: r data.table