본문 바로가기
R프로그래밍

R프로그래밍 - 여러 폴더에서 원하는 csv파일만 불러서 합치기

by 미스터탁 2020. 6. 25.

 

 

이전 포스팅에서 폴더 안에 여러 csv파일을 불러들여서 합치는 코드를 작성해보았습니다.

 

https://bluediary8.tistory.com/85?category=787191

 

R프로그래밍 - 폴더 안에 여러 csv파일들 하나로 불러 들이기 list.files 함수

이번에는 하나의 폴더안에 있는 여러 csv파일들을 R로 불려들여서 하나로 합쳐보는 코드를 작성해보겠습니다. 우선 임의의 폴더안에 여러개의 csv파일들을 복사해서 붙여넣었습니다. R이 익숙치

bluediary8.tistory.com

이번에는 난이도를 조금 높여서 여러 폴더안에서 특정 문자가 들어간 csv파일만 골라서 합치는 코드를 작성해 보도록 하겠습니다.

 

 

 

아래 화면고 같이 new폴더안에 1, 2, 3 폴더가 있다라고 가정을 하고 

 

 

 

각 폴더안에는 다음과 같은 csv파일들이 있다고 가정을 해보죠 

 

 

 

즉, 

 1폴더 - 6개의 csv

 2폴더 - 6개의 csv

 3폴더 - 6개의 csv

와 같은 구조로 이루어져있고

 

 

여기서 우리는 특정 글자가 들어간 csv파일만 불러서 합쳐보도록 하겠습니다.

 

 

 

우선 큰 골격만 짜보도록 하죠

 

최종적인 data가 들어갈 final 변수를 선언해주고

 

아래와 같이 1부터 3폴더 까지 working directory를 변경하고

 

working directory 안에서 csv파일들을 받아와야겠죠?

final <-NULL
for(j in 1:3){
  
  setwd(paste0("D:\\R\\new\\",j))  ## Working directory setting
  file_list<- list.files()
  
  
}

 

 

 

그리고 각 폴더안에서 csv파일을 받고 그안에서 원하는 파일만 받아와야합니다.

 

본 예제에서는 파일명에 "cc"가 들어간 파일만 받아오도록 하겠습니다.

 

str_detect를 이용해서 파일명에서 cc가 있는  index를 찾고

 

폴더 안 csv list에서 해당 index에 해당하는 csv만 받아 옵니다.

 

 

library(stringr)
final <-NULL
for(j in 1:3){
  
  setwd(paste0("D:\\R\\new\\",j))  ## Working directory setting
  file_list<- list.files()
  file_index<-str_detect(file_list,"cc")
  file_list[file_index]
  
  
}

 

 

이제 우리가 원하는 csv파일 list를 받았으니

 

for문안에 또 for문을 열어야합니다.

 

이러한 구조를 이중 for문이라고 이야기합니다.

 

두번째 for문안에서는 csv파일을 read.csv 해서 최종 데이터 frame인 final변수와 rbind 시켜주어야합니다.

 

 

library(stringr)
final <-NULL
for(j in 1:3){
  
  setwd(paste0("D:\\R\\new\\",j))  ## Working directory setting
  file_list<- list.files()
  file_index<-str_detect(file_list,"cc")
  csv_file<-file_list[file_index]
  
  for(i in 1:length(csv_file)){
    
     ## csv파일 read
     ## final과 rbind
    
  }
  
  
}

 

 

 

 

아래와 같이 코드를 완성해주시면 됩니다.!!


library(stringr)
final <-NULL
for(j in 1:3){
  
  setwd(paste0("D:\\R\\new\\",j))  ## Working directory setting
  file_list<- list.files()
  file_index<-str_detect(file_list,"cc")
  csv_file<-file_list[file_index]
  
  for(i in 1:length(csv_file)){
    
    data<-read.csv(csv_file[i])    ## csv파일 read
    final<-rbind(final,data)     ## final과 rbind
    cat("\n",j,"-",i)
    
  }
  
  
}

head(final)
dim(final)

 

 

 

코드를 돌리시면 아래 화면처럼 cat에 의해 진행 상황이 나오게 되죠

 

1번폴더부터 3번폴더까지 에러가나지 않고 잘 돌아간 것을 확인 할 수 있습니다.

 

 

 

head와 dim함수를 통해서도 데이터가 잘 합쳐진 것을 확인 할 수 있습니다.

반응형

댓글