2017-01-18 14 views
1

インポートするファイルが多数あり、すべてがzipファイルとして保存されています。Rの動的名変数を使用したファイルのルーピング

他の投稿を読むことで、私はZIPファイル名を渡してから、開きたいファイルの名前を渡す必要があるようです。私はそれらをたくさん持っているので、私はすべてのファイルをループして1つずつインポートできると思った。

名前を動的に渡す方法はありますか、これを行う簡単な方法はありますか?ここで

は、私がこれまで持っているものです。

Temp_Data <- NULL 
Master_Data <- NULL 


file.names <- c("f1.zip", "f2.zip", "f3.zip", "f4.zip", "f5.zip") 

for (i in 1:length(file.names)) { 
    zipFile <- file.names[i] 
    dataFile <- sub(".zip", ".csv", zipFile) 

    Temp_Data <- read.table(unz(zipFile, 
          dataFile), sep = ",") 

    Master_Data <- rbind(Master_Data, Temp_Data) 

} 

私は次のエラーを取得する:

In open.connection(file, "rt") : 

私が使用して手動でインポートすることができます。

dt <- read.table(unz("D:/f1.zip", "f1.csv"), sep = ",") 

私が作成することができます動的に刺すが、長時間巻き込まれてしまい、read.table(unz(...))でラップするとうまくいかない。ファイル名を見つけることができないようですので、エラー

cat(paste(toString(shQuote(paste("D:/",zipFile, sep = ""))),",", 
     toString(shQuote(dataFile)), sep = ""), "\n") 

はスローしかし、私は、私が得るコンソールにこれを印刷する場合:私は、 `読みにこれを貼り付けることができ

"D:/f1.zip","f1.csv" 

。テーブル(unz(....))とそれが動作するので、私は近くにいるように感じる

私はdata.tableでタグ付けしました。これは 'fread'それは素晴らしいだろう。

すべてのヘルプは

+0

'?fread'の1つの例は、ファイルを読み込む前に' system( "bunzip2 2008.csv.bz2") 'を使ってファイルを解凍します。おそらく同様の行を追加するべきです。私は別のループでこれを行うことをお勧めしますが、コメントを付けて繰り返し同じファイルを解凍するのを避けることができます。 – lmo

+0

完全なエラーメッセージとトレースバックは何ですか?作業ディレクトリやファイルへのパスに問題はありますか? – Christoph

+0

@Christophあなたは正しいです、それは私のWDの問題でした、私は読んでペンドライブを使用しています - 私の愚かな基本をチェックしないでください!ありがとうございました! – MidnightDataGeek

答えて

2

を高く評価されますが、ここでlist.filesコマンドを使用することができます。

file.names = list.files(pattern = "*.zip", recursive = F) 
その後、

setwd("C:/Users/...") 

は、最初にすべてのファイルがそこに保存されている作業ディレクトリを設定

あなたのforループは次のようになります:

for (i in 1:length(file.names)) { 
#open the files 

zipFile <- file.names[i] 
dataFile <- sub(".zip", ".csv", zipFile) 

Temp_Data <- read.table(unz(zipFile, 
         dataFile), sep = ",") 
# your function for the opened file 
Master_Data <- rbind(Master_Data, Temp_Data) 

#write the file finaly 
write_delim(x = Master_Data, path = paste(file.names[[i]]), delim = "\t", 
col_names = T)} 
+0

私はすべてのファイル名を持っています。私はループ内の 'unz'関数にファイル名を渡したいので、すべてを再帰的に開くことができます。 – MidnightDataGeek

+0

あなたは最終的に各zipファイルのMaster_Dataを取得します。各ファイルの一意の名前でディスクに書き込む必要があります。これが欲しいですか?私の答えをもう一度見てください。私はすでに編集しています。 –

+0

ありがとうございました。私が持っていたことはほとんどありましたが、私が使っていたペンドライブに問題があったことが判明しました。 – MidnightDataGeek

関連する問題