我在使用包含 30 列左右的合理大小的 data.table 时遇到问题:(注意我在下面使用虚拟值)
使用rbindlist(list(dat, dat2))
添加具有相同字段和另外 50000 行的新 data.table 会产生不正确的新主 data.table。
是否有一种简单快速的解决方案可以将新行添加到列字段都匹配的 data.table 中?
为了简化,我创建了一个虚拟数据集。
master.df <- data.frame(id = letters[1:10],
mpg = sample(c(20,22), 10, replace = TRUE),
cyl = sample(c(4,8), 10, replace = TRUE),
disp = sample(c(160,300), 10, replace = TRUE),
factor = sample(c(TRUE, FALSE), 10, replace = TRUE),
hp = sample(c(20,22), 10, replace = TRUE))
newTable.df <- data.frame(id = letters[11:15],
mpg = sample(c(20,22), 5, replace = TRUE),
cyl = sample(c(4,8), 5, replace = TRUE),
disp = sample(c(160,300), 5, replace = TRUE),
factor = sample(c(TRUE, FALSE), 10, replace = TRUE),
hp = sample(c(20,22), 5, replace = TRUE))
library(data.table)
dat = as.data.table(master.df)
dat2 = as.data.table(newTable.df)
使用rbind(dat,dat2)
输出重复 dat2。(预计应该是总共 15 行)
我阅读了论坛以寻求更好的解决方案,并提出了一些建议,rbindlist
但这看起来也不起作用。与输出相同rbind
有没有一种快速的解决方案可以将 dat2 绑定到 dat 而不重复?
rbind 和 rbindlist 的输出
id mpg cyl disp factor hp
1: a 22 8 300 FALSE 20
2: b 20 8 300 TRUE 20
3: c 20 8 160 FALSE 20
4: d 20 4 300 TRUE 22
5: e 22 4 160 FALSE 22
6: f 22 4 160 TRUE 22
7: g 20 8 160 FALSE 20
8: h 22 4 300 FALSE 20
9: i 22 4 160 FALSE 20
10: j 22 8 160 TRUE 22
11: k 22 8 160 FALSE 20
12: l 22 8 160 TRUE 20
13: m 20 8 300 TRUE 20
14: n 22 4 300 FALSE 20
15: o 20 8 160 FALSE 20
16: k 22 8 160 FALSE 20
17: l 22 8 160 FALSE 20
18: m 20 8 300 FALSE 20
19: n 22 4 300 TRUE 20
20: o 20 8 160 TRUE 20