2017-12-24 12 views
0

大きなデータフレーム(50+列)があります。 それぞれの行が異なる順序で取得され、データフレームに新しい行を追加する必要がありますが、この新しい行は正しい列を更新するはずです。Rの列に従って新しいエントリで大規模なデータフレームを更新しますか?

例えば、私はdfを持っている:

col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 ......... 
1 a Don Lu 854 W eee 1 1234 yes 
4 s34 Dino Ken 44 S aaa 1 3432 no 
5 1ee Pupu Dar 2215 R bbb -4 12121 yes 

私は新しいエントリを取得:

col6 col2 col5 col4 col3 col1 col7 col10 col9 col8 ......... 
R re3 666 Rino Pino 33 ddd no 55874 6 

を私が使用することもでき 約dplyrは名前や更新によってarrangeに関数を手配思いました$それぞれを更新するには、ベストプラクティスを教えてください。

答えて

1

を試してみて、私はdata.tableパッケージからrbindlist()を使用します。

merged <- list(df, df1) 
rbindlist(merged, fill = TRUE) 

は非常に迅速に作業します。実際には、あなたはかなり迅速に仕事をしていませんlist

merged <- list(df1, df2, ...... , df99999, df100000) 
rbindlist(merged, fill = TRUE) 

であなたが望むように多くのエントリを置くことができます。

df1の中のにはないエントリは、それに応じてNAとなります。

+0

私は今これを試してみるつもりです、ありがとう!!! –

2

merge()を使用し、引数allTRUEと設定してください。あなたの新しいエントリがdata.frame()でAsummingとdf1呼ば

df <- read.table(text = "col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 
       1 a Don Lu 854 W eee 1 1234 yes 
       4 s34 Dino Ken 44 S aaa 1 3432 no 
       5 1ee Pupu Dar 2215 R bbb -4 12121 yes", header=TRUE) 
new.entry <- read.table(text = "col6 col2 col5 col4 col3 col1 col7 col10 col9 col8 
           R re3 666 Rino Pino 33 ddd no 55874 6", header = TRUE) 

merge(df, new.entry, all = TRUE) 
# col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 
# 1 a Don Lu 854 W eee 1 1234 yes 
# 4 s34 Dino Ken 44 S aaa 1 3432 no 
# 5 1ee Pupu Dar 2215 R bbb -4 12121 yes 
# 33 re3 Pino Rino 666 R ddd 6 55874 no 
+0

私は試しましたが、動作しません、あなたは例を投稿できますか? –

+2

これは最も賢明な答えですが、効率的には最適ではないかもしれません。 – InfiniteFlashChess

+0

他に解決策がありますか? –

1

dplyrからのbind_rows()も有効です。

data <- data.frame(x = rep("ABC", 3), y = 1, z = 0) 
data1 <- data.frame(y = 2, x = rep("XX", 4)) 
datax <- bind_rows(data, data1) 
関連する問題