2017-02-15 2 views
0

다음과 같은 문제점이 있으며 지금까지는 해당 답변을 찾지 못했습니다.디렉토리와 파일을 반복하고 파일을 다른 이름으로 새로운 디렉토리에 저장

I've는 다음 디렉토리에 하위 폴더에 저장된 데이터 세트의 부하를 가지고 :

C:/Users/Desktop/Data Generation 

하위 폴더가이 패턴 follwing을하고 있습니다 : 3-1에서 모델의 가능한 변화와

/Model 1/Model_1_250skew1mar1 

을; 250 명을 750 명으로 늘린다. 스큐 1 내지 3; Mar의 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/각 디렉토리의 해당 디렉토리에 저장합니다.

# 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