2016-05-31 2 views
1

forループでcsvファイルを書きたいと思います。変数xをシンプルにするために、3行のデータフレームdataがあるとします。結局のところ、私の出力は200個の.csvファイルになり、それぞれに1行のデータが含まれています。データの最初の列は、私の変数のID( "ID")です。forループで.csvを書いてください。

さらに、私のデータは、次のように説明されています

data: 

    ID x 
[1] a 1 
[2] b 2 
[3] c 3 

for (i in nrow(data)){ 
    write.csv(data[i,2], file = paste0("Directory/", "data[i,1], ".csv")) 
} 

私はこのコードとcsvファイルが作成される実行します。しかし、最後の行だけが作成されます。つまり、1つのファイルc.csvで見つけられます。

私が間違っていることを知っていますか?すべてのアーカイブを自動的に作成すると思った。結果をリストに保存してからエクスポートする必要がありますか?

+1

おそらく私は誤カウントしていますが、あなたの引用符で何かが外れているようです。コード1:1をコピー&ペーストしましたか? – patrick

+1

'nrow(data)'は1つの数字であり、反復する数字の束ではありません。 '1:nrow(data)'または 'seq(nrow(data))'が必要です。あるいは 'lapply'を使うだけです。また、data [i、1] 'に余分な引用があります。 – alistaire

+1

@Rafaelの答えは素晴らしいですが、コードがうまくいかない理由を説明するには複雑すぎるかもしれません。 (data [i、2]、file = paste0( "ディレクトリ/ファイル名")を指定してください。 "、data [i、1]、" .csv ")) } また、Rの一般的なヒントはあなたのデータを"データ "と呼ぶことはありません。 – paleo13

答えて

0

ループを使用する必要はありません。 data.tableアプローチを使用すると、より効率的で高速になります。グループではなく、行

によって dataframeのサブセットを保存:はるかに高速ループ

# in case you still want to use a loop, this will do the work for you: 

for (i in 1:nrow(dt)){ 
         write.csv(dt[i,], file = paste0("loop_", i, ".csv")) 
         } 

エクストラを使用して

# Now in case you're working with a large dataset and you want 
# to make things much faster, you can use `fwrite {data.table}`* 

dt[, fwrite(.SD, paste0("output_", rowpos ,".csv")), 
       by = rowpos, .SDcols=names(dt) ] 

ものを作る

library(data.table) 

# create a column with row positions 
setDT(dt)[, rowpos := .I] 

# save each line of your dataset into a separate .csv file 
dt[, write.csv(.SD, paste0("output_", rowpos,".csv")), 
        by = rowpos, .SDcols=names(dt) ] 

# This line of code will save a separate `.csv` file for every ID # and name the file according to the ID setDT(dt)[, fwrite(.SD, paste0("output_", ID,".csv")), by = ID, .SDcols=names(dt) ] 

* ps。 fwriteはまだ開発版data.table 1.9.7にあります。インストール手順については、hereにアクセスしてください。

+0

こんにちはRafaelさん、ご返信ありがとうございますが、私はまだそれを行う方法を理解することができません。次のエラーを受け取ります: "[.data.frame'のエラー(vazao_total、、write.csv(copy私のIDまたはV1はmunです。多分私は、私は何かを見ていない...私は試し続けて、私はなぜこれが起こっている見つける場合はお知らせください。また、私はgithubを通して{data.table}をインストールした後にfwriteを試しましたが、うまくいきません。 – rebeca

+0

こんにちは@rebeca、私はコードに軽微な訂正をしたし、今それは動作するはずです。 'library(data.table)'と 'setDT(yourdata)'を使うことを忘れないでください。 –

関連する問題