17

複数のデータ フレームを 1 つのデータ構造に格納し、後でデータ フレームごとに処理することは可能ですか? つまり例

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 でそのようなデータ構造を見つけることができません。同じ機能を示すコードを教えてもらえますか?

4

3 に答える 3

15

data.framesをリストに入れるだけです。プラスは、 aがスタイル ループlistで非常にうまく機能することです。applyたとえば、data.frame を保存する場合は、次を使用できますmapply

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

スタイル ループが好きならapply(そして、私を信じてください :))、epicplyrパッケージを見てください。これは最速のパッケージではないかもしれませんが ( data.tablefast を探してください)、構文糖分が滴り落ちます。

于 2012-09-04T18:01:23.677 に答える
8

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

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

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

データ フレーム インデックスを囲む二重括弧に注意してください。あなたの例では、それは

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 を返しますが、mylist[1][1,2]NULL を返します。これを見つけるのに時間がかかったので、ここに投稿するのが役立つかもしれないと思いました.

于 2014-08-28T09:50:33.250 に答える
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"))
})
于 2012-09-04T18:13:15.950 に答える