37

この質問がすでに回答されている場合は申し訳ありません。また、スタックオーバーフローはこれが初めてです。

merge()リスト、データ フレーム、および/またはに関する初心者の R の質問がありますrbind()

このようなパネルから始めました

COUNTRY YEAR VAR
A         1
A         2
B         1
B         2

効率化のために、国ごとに 1 つのデータ フレームで構成されるリストを作成し、各個人についてさまざまな計算を実行しましたdata.frame。ただし、個々のデータ フレームを再び 1 つの大きなフレームに結合することはできないようです。

rbind()merge()どちらも、要素の置換のみが許可されていることを教えてくれます。

誰かが私が間違っていること/データフレームを実際に再結合する方法を教えてもらえますか?

ありがとうございました

4

5 に答える 5

39

多分あなたは次のようなことをしたいでしょう:

do.call("rbind", my.df.list)

于 2010-03-06T17:16:10.500 に答える
13

dplyr では、 bind_rows 関数を使用できます。

library(dplyr)

foo <- list(df1 = data.frame(x=c('a', 'b', 'c'),y = c(1,2,3)), 
         df2 = data.frame(x=c('d', 'e', 'f'),y = c(4,5,6)))

bind_rows(foo)
于 2016-12-07T11:04:59.353 に答える
10

基本的な解決策に注意してください

do.call("rbind", my.df.list)

多くのデータフレームがあると遅くなります。スケーラブルなソリューションは次のとおりです。

library(data.table)
rbindlist(my.df.list)

docsから、これはsame as do.call("rbind", l) on data.frames, but much faster.

于 2016-05-12T17:06:40.723 に答える
4

プライヤーがベストでしょう。データ フレームが異なる可能性がある場合のもう 1 つの便利な方法は、reshape を使用することです。

library(reshape)
data <- merge_recurse(listofdataframes)

データ フレームのマージに関するこの関連する質問に対する私の回答を見てください。

于 2010-03-06T18:19:20.700 に答える
4

これを行うためのより良い方法があるかもしれませんが、これはうまくいくようで、簡単です。(私のコードは 4 行で構成されているため、ステップが見やすくなっています。これら 4 行は簡単に組み合わせることができます。)

# first re-create your data frame:
A = matrix( ceiling(10*runif(8)), nrow=4)
colnames(A) = c("country", "year_var")
dfa = data.frame(A)

# now re-create the list you made from the individual rows of the data frame:
df1 = dfa[1,]
df2 = dfa[2,]
df3 = dfa[3,]
df4 = dfa[4,]
df_all = list(df1, df2, df3, df4)

# to recreate your original data frame:
x = unlist(df_all)         # from your list create a single 1D array 
A = matrix(x, nrow=4)      # dimension that array in accord w/ your original data frame
colnames(A) = c("country", "year_var")     # put the column names back on
dfa = data.frame(A)        # from the matrix, create your original data frame
于 2010-03-06T15:52:59.103 に答える