妥当なサイズの data.table で 30 ほどの列を含む問題が発生しています: (以下のダミー値を使用していることに注意してください)
を使用rbindlist(list(dat, dat2))
して、同じフィールドを持つ新しい data.table を別の 50000 行で追加すると、誤った新しいマスター 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