【发布时间】:2015-12-08 05:12:22
【问题描述】:
我正在尝试合并(连接)多个数据表(从 5 个 csv 文件中获取 fread)以形成单个数据表。当我尝试合并 5 个数据表时出现错误,但当我只合并 4 个时工作正常。MWE 下面:
# example data
DT1 <- data.table(x = letters[1:6], y = 10:15)
DT2 <- data.table(x = letters[1:6], y = 11:16)
DT3 <- data.table(x = letters[1:6], y = 12:17)
DT4 <- data.table(x = letters[1:6], y = 13:18)
DT5 <- data.table(x = letters[1:6], y = 14:19)
# this gives an error
Reduce(function(...) merge(..., all = TRUE, by = "x"), list(DT1, DT2, DT3, DT4, DT5))
merge.data.table 中的错误(..., all = TRUE, by = "x") : x 有一些 重复的列名:y.x,y.y。请删除或重命名 复制并重试。
# whereas this works fine
Reduce(function(...) merge(..., all = TRUE, by = "x"), list(DT1, DT2, DT3, DT4))
x y.x y.y y.x y.y
1: a 10 11 12 13
2: b 11 12 13 14
3: c 12 13 14 15
4: d 13 14 15 16
5: e 14 15 16 17
6: f 15 16 17 18
我有一个解决方法,如果我更改 DT1 的第二列名称:
setnames(DT1, "y", "new_y")
# this works now
Reduce(function(...) merge(..., all = TRUE, by = "x"), list(DT1, DT2, DT3, DT4, DT5))
为什么会发生这种情况,有没有办法在不更改任何列名的情况下合并任意数量的具有相同列名的数据表?
【问题讨论】:
-
“工作正常”?祝你好运有两个
y.ys 等。 -
@Frank 是的,但我可以在获得合并数据表后使用 setnames()(我总是按特定顺序读取 5 个文件),所以这对我来说不是问题。
-
@srao - 这是个坏主意 - 在加入之前/期间执行
setnames,而不是之后 -
@Frank 是的,
x在所有 DT 中完全相同。没有重复的值。 -
@srao 如果
x对所有这些都完全相同,则不应合并
标签: r join merge duplicates data.table