この質問に既に回答されている場合は、申し訳ありません。また、stackoverflowが初めてです。
リスト、データフレーム、およびmerge()
やrbind()
に関する初心者Rの質問があります。
このようなパネルから始めました
_COUNTRY YEAR VAR
A 1
A 2
B 1
B 2
_
効率化のために、国ごとに1つのデータフレームで構成されるリストを作成し、個々の_data.frame
_に対してさまざまな計算を実行しました。ただし、個々のデータフレームを1つの大きなフレームに再度結合することはできません。
rbind()
とmerge()
はどちらも、要素の置換のみが許可されていることを示しています。
誰かが私が間違っていることを教えてくれますか/データフレームを実際に再結合する方法は?
ありがとうございました
多分あなたは次のようなことをしたいでしょう:
do.call("rbind", my.df.list)
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)
基本的な解決策
_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.
です
これを行うにはもっと良い方法があるかもしれませんが、これはうまくいくようで、簡単です。 (私のコードには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
プライアはおそらく最良です。データフレームが異なる可能性がある場合の別の有用なアプローチは、形状変更を使用することです。
library(reshape)
data <- merge_recurse(listofdataframes)
データフレームのマージに関するこの関連質問 に対する私の回答を見てください。