2016-08-23 15 views
1

Name列の値に基づいて、複数の小さなデータフレームに分割したい大きなデータフレームがあります。複数の小さなデータフレームを複数の小さなデータフレームに分割する

head(DATAFILE) 

# Age Site Name 1 2 3 4 5 

# 10  1  Orange 0 2 1 0 1 
# 10  1  Apple 2 5 4 0 2 
# 10  1  Banana 0 0 0 0 2 
# 20  2  Orange 0 2 1 0 0 
# 20  2  Apple 0 2 0 7 1 
# 20  2  Banana 0 4 1 3 6 

そして、望ましい出力のサンプルファイル。

head(Orange) 

# Age Site Name 1 2 3 4 5 

# 10  1  Orange 0 2 1 0 1 
# 20  2  Orange 0 2 1 0 0 

私は

SPLIT.DATA <- split(DATAFILE, DATAFILE$Name, drop = FALSE) 

を試してみましたが、しかし、これは大規模なリストを返し、私はの.csvファイルとして保存できるように、私は個々のファイルをしたいと思います。だから私は元のファイルを分割するより良い方法、またはSPLIT.DATAファイルをさらに分割する方法を望んでいます。

+2

代わりにグローバルenvirnomentで複数のオブジェクトを持つ、その後、個別に保存するので一斉にCSVファイルへの書き込みに 'SPLIT.DATA'を通じて' list'とループの中でそれを維持することをお勧めします。 (nm、 ".csv")、row.names = FALSE、quote = FALSEを返します。 )) ' – akrun

+0

Rの質問(Rタグの説明を参照)でこのようなデータを共有するには' dput'を使うことをお勧めします。これは、あなたを助けたい人が簡単に再現できる方法です。 –

+0

私はすでにコメントを更新しました。これをチェックしてください。 – akrun

答えて

1

グローバル環境で個々のオブジェクトを作成する代わりに、split出力のlist出力から直接データセットを保存する方が良いです。 'SPLIT.DATA'のnamesでループし、list要素の名前と同じ名前の個々のCSVファイルにpasteという名前でwrite.csvコールで.csvという名前を書き込みます。

lapply(names(SPLIT.DATA), function(nm) 
    write.csv(SPLIT.DATA[[nm]], paste0(nm, ".csv"), row.names = FALSE, quote = FALSE)) 
+0

個々のdata.framesがグローバルな環境を汚染するのを防ぐ。 'list2env'は非常に便利です。 – hvollmeier

+0

@hvollmeierはい、 'list2env'を使うことができますが、' lsit'の中で行うことができる操作のほとんどが推奨されていません。 – akrun

+0

@akrunちょっとakrunは、 'lapply'を使う時だけでなく、ケース。ほとんどの場合に使用しますが、その中でどの機能を使用しているかにかかわらず、いつ自分がいつ行くのか理解することができます。 –

関連する問題