2011-01-31 10 views
8

非常に単純なRスクリプトは、テキストファイル "0.txt"に昇順の行インデックスを追加し、ヘッダー "時間"を追加します。データはRスクリプトでファイル名を反復処理する方法は?

data<-read.table("0.txt", header=TRUE,sep=",",row.names= NULL); 
colnames(data)[1] = "time" 
write.table(data,quote=FALSE,sep=", ","0-edit.txt"); 

がどのように、私は4つの0.txtと呼ばれるファイル、1.TXT、2.txt、...同じフォルダ内にあると仮定したファイル「0-edit.txt」に書かれていることをした後、スクリプト内のファイル名を反復処理するためにカウンタなどを使用できますか?

答えて

12
for(i in 0:3) { 
    infile <- paste(i,".txt",sep="") 
    outfile <- paste(i,"-edit.txt",sep="") 

    data <- read.table(infile,header=TRUE,sep=",",row.names=NULL) 
    colnames(data)[1] = "time" 
    write.table(data,quote=FALSE,sep=", ",outfile) 
} 
+0

ありがとう、貼り付け機能が何とか私を逃げました –

+1

@Martin:どうぞよろしくお願いします。あなたは '?file.path'を見つけることもできます。 –

3

より一般的には、あなたが指定したディレクトリ内のファイルを取得するためにdir()を使用して、ファイルを.txtにそれを制限するselectを使用することができます。ここで

file.dir <- "/path/to/files" 
for(infile in dir(file.dir, pattern="\\.txt$")) { 
    outfile <- gsub("\\.txt$","-edit\\.txt", infile) 

    data <- read.table(infile,header=TRUE,sep=",",row.names=NULL) 
    colnames(data)[1] = "time" 
    write.table(data,quote=FALSE,sep=", ",outfile) 
} 
12

はlapply使用してループのないソリューションです。私にとって

infiles <- dir(pattern='\\.txt$') 

change.files <- function(file){ 
    data <- read.table(file, header=TRUE, sep=",", row.names=NULL) 
    colnames(data)[1] = "time" 
    write.table(data, quote=FALSE, sep=", ", sub("\\.txt$","-edit.txt", file)) 
} 

lapply(infiles , change.files) 

このアプローチの本当の利点は、あなたが簡単に代わりの(マルチコアパッケージから)mclapplyを使用して並列で実行することができるということですラップリー。またはparLapplyから雪。私にとっても、それはより良く見えます。

+0

これはちょうど別のタスクのために便利に来て、私は同意する必要があります、それはエレガントです –

6

これを試してみてください:

files <- list.files(path="", pattern=".txt", all.files=T, full.names=T) 
for (file in files) { 
## do stuff 
} 

テキストファイルの多くを持っていますが、数字のみの名前、使用「を持つものをしたいので、もしあなたが、パターンマッチングのための正規表現を使用することができます[0-9] .txtの"または" [0-3] .txt "と入力します。

関連する問題