0

妥当なサイズの 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
4

2 に答える 2