2017-02-15 4 views
0

私は以下の問題を抱えています。今のところ私は該当する答えを見つけられませんでした。ディレクトリとファイルをループし、異なる名前の新しいディレクトリにファイルを保存する

I'veは、次のディレクトリ内のサブフォルダに格納されたデータセットの負荷を得た:

C:/Users/Desktop/Data Generation 

サブフォルダこのパターンfollwingれる:1〜3のモデルにおける可能な変化に

​​

と、同様に750から250までスキュー1~3。そして3月1日例えば3

へ:M2_1000

今、私は私のデータセットを取得したいスルーモデル2 M2_1M1_1000スルーまたはのためにM1_1::私は私のデータセットを持って、それらのサブフォルダに/Model 3/Model_3_750skew2mar2 or /Model 2/Model_2_250skew3mar1

M1_1スルーM1_1000を入力し、欠落している値を置き換えて、それらのデータセットを新しいディレクトリに保存します。

C:/Users/Desktop/Data Generation/ NA /Model 1/Model_1_250skew1mar1 

私はfollwingコードと私のサブディレクトリのいずれかのためにこれを行うことができる午前:

files_M_neu <- list.files(path="C:/Users/Desktop/Data Generation/Model 1/Model_1_250skew1mar1", 
         pattern="M1_*[^list].dat", recursive=TRUE, full.names=TRUE) 

dir.create("C:/Users/Desktop/Data Generation/NA") 
dir.create("C:/Users/Desktop/Data Generation/NA/Model 1") 
dir.create("C:/Users/Desktop/Data Generation/NA/Model 1/Model_1_250skew1mar1") 

for(i in 1:length(files_M_neu)){ 
    data <- read.table(files_M_neu[i], header=TRUE) 
    fix_missing <- function(x) { 
    x[x == 999] <- NA 
    x 
    } 
    data <- fix_missing(data) 
    write.table(data, paste("C:/Users/Desktop/Data Generation/NA/Model 1/Model_1_250skew1mar1/data[",i,"].dat"), 
       sep="\t", row.names = FALSE, col.names = FALSE) 
    rm(data) 
} 

どのように私は、私は上記のコードを54回を持っていないように、このプロセスを自動化することができていますか?私はきれいな方法が好きです:私のファイルを取得し、ミスを置き換え、私がそれらを持っているディレクトリからファイルを保存してください...

私はRには新しいですが、私は試しました異なった事は、今、私は

答えて

0

ここでは、再帰的にWDの下のすべてのディレクトリを読み取るためにlist.dirs()を使用して一つの解決策だが、その後、同じ作成

は、事前にありがとう...解決策にどの近づくために道を参照してくださいいけませんwd/NA /の下のディレクトリツリーを開き、最終的に処理ファイルに完全な相対名を持つ dir()または list.files()を使用し、wd/NA/eachをディレクトリに保存します。

# set wd to work with relative path ./ 
setwd("C:/Users/Desktop/Data Generation/") 

# get the list of all directories: 
dirList = NULL 
for (d in list.dirs(path = ".", full.names=TRUE, recursive=TRUE)){ 
    dirList = rbind(dirList, d) 
} 

# create the directories tree in ./NA/ 
for (d in dirList){ 
    dir.create(paste0('NA',gsub("\\.", "", d)), recursive = TRUE) 
} 

# process files and save with full path to ./NA/ 
for (f in dir(path = ".", pattern = '*\\.dat$', full.names=TRUE, recursive=TRUE)){ 
    data <- read.table(f, header=TRUE) 
    data <- fix_missing(data) 
    write.table(data, paste0('NA',gsub("\\./", "/", f)), 
       sep="\t", row.names = FALSE, col.names = FALSE) 
    rm(data) 
} 
+0

ありがとうございました!これは私に多くの助けになる!! – AndySOWI

関連する問題