我正在尝试合并(联接)多个数据表格(使用fread从5个CSV文件中获取)以形成一个单一的数据表格。当我尝试合并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))
Error in 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.y
,等等。 - Franksetnames
,而不是之后。 - eddix
在所有 DT 中完全相同。没有重复的值。 - sraox
对于它们所有的值都完全相同,那么你不应该合并。 - eddi