2012-09-04 19 views
10

複数のデータフレームを1つのデータ構造に格納し、後で各データフレームで処理することは可能ですか?すなわち例複数のデータフレームを1つのデータ構造に格納する - R

df1 <- data.frame(c(1,2,3), c(4,5,6)) 
df2 <- data.frame(c(11,22,33), c(44,55,66)) 

...そして私は、彼らがデータ構造に追加してもらいたい私は、そのデータ構造をループが一度に各データフレーム1を取得することができるようにし、それを処理し、

のようなものでしょう
for (iterate through the data structure) # this gives df1, then df2 
{ 
    write data frame to a file 
} 

Rでこのようなデータ構造を見つけることができません。同じ機能を示すコードを誰かが指摘できますか?

答えて

11

data.framesをリストに入れるだけです。プラスは、listapplyスタイルループでうまく機能するということです。あなたはdata.frame年代を保存したい場合たとえば、あなたは使用することができmapply

l = list(df1, df2) 
mapply(write.table, x = l, file = c("df1.txt", "df2.txt")) 

あなたは(あなたが、私を信頼します:))叙事詩plyrパッケージをご覧くださいapplyスタイルのループのような場合。これは最速のパッケージではないかもしれませんが(速い場合はdata.tableと表示されます)、構文的な砂糖で落ち着きます。

+0

ビート・ミー! 'lapply'を使ってdata.framesのリストを"反復 "することもできます。 – Justin

+0

@ Justinの答えが完全であるために、行または2つのコードを追加する価値があります。 – joran

+0

'mapply'を使って' write.table'を使ってdata.framesを保存する方法の例を追加しました。 –

8

リストはdata.frame Sを含め、ほとんどすべてを保持するために使用することができます。リストに格納された複数のデータオブジェクトを書き込むため

## Versatility of lists 
l <- list(file(), new.env(), data.frame(a=1:4)) 

lapply()はあなたの友達です:あなたは何

ll <- list(df1=df1, df2=df2) 
## Write out as *.csv files 
lapply(names(ll), function(X) write.csv(ll[[X]], file=paste0(X, ".csv"))) 
## Save in *.Rdata files 
lapply(names(ll), function(X) { 
    assign(X, ll[[X]]) 
    save(list=X, file=paste0(X, ".Rdata")) 
}) 
+0

+1であり、listは、第1の要素としての 'data.frame'、第2の要素としての' list'、第3のオブジェクトとしての 'lm'の結果など、根本的に異なるオブジェクトを保持することさえできます。 –

+0

@PaulHiemstra - これを追加しても嬉しいです。私はちょうど私がR新生児だったときにそれらのファイルライティング構成が私にあっただろう時間を節約するものを知っています... –

5

探しているのはlistです。 lapplyのような機能を使用して、各データフレームを同じ方法で適切に扱うことができます。ただし、データフレームのリストを相互に関連してデータフレームを処理する関数に渡す必要がある場合があります。この場合、lapplyはあなたを助けません。

そのため、リスト内のデータフレームにアクセスして反復する方法に注意することが重要です。これは次のようになります。

mylist[[data frame]][row,column] 

データフレームインデックスの前後に二重括弧があります。 mylist[1][1,2]はNULLを返すのに対し、 だからあなたの例のために、それは

df1 <- data.frame(c(1,2,3), c(4,5,6)) 
df2 <- data.frame(c(11,22,33), c(44,55,66)) 
mylist<-list(df1,df2) 

mylist[[1]][1,2]なり、4を返します。私がこれを見つけるまでにはしばらく時間がかかったので、ここに投稿すると役に立つかもしれないと思った。

関連する問題