R/Contents

R에서 [반복문]을 활용하여 케이스 추출 후 개별 .csv 파일로 저장하기

VTAOE 2020. 3. 12. 01:54

- situation -

졸업율이 들어있는 파일에서 각각의 학교구  ID를 기준으로 파일을 추출하고(총48개의 학교구가 있음), 그 추출된 각각의 파일을 .csv 파일로 저장하되 특정 파일명이 포함되도록 저장했으면 좋겠다는 디렉터의 요청이 있었습니다.  

 

- methods -

 

1. 각각의 학교구ID를 선택한 후 저장하기

패키지를 설치 한 후, filter 명령어를 활용하여 48개의 학교구별로 파일을 추출하고 이것을 다시 각각의 파일로 저장하는 방법입니다. 

 

setwd("C:/Users/work/") #워킹디렉터리 설정하기

install.packages("dplyr") #dplyr 패키지 설치하기

install.packages("readr") #readr 패키지 설치하기

library(dplyr) #dplyr 패키지 불러오기

library(readr) #readr 패키지 불러오기

 

GradR <- read.csv("Graduation.csv", stringsAsFactors=FALSE) # 데이터를 불러오고 GradR이라 부르기로 함

SD001 <- GradR %>% filter(SDID == "SD001") #SD001 학교구를 선택한 후 SD001이라고 부르기로 함

write.csv(SD001, "SD001_GRADUATIONRATE.csv") #SD001 파일을 SD001_GRADUATIONRATE.csv로 저장

:

:

SD068 <- GradR %>% filter(SDID == "SD068")

write.csv(SD048, "SD048_GRADUATIONRATE.csv")

 

 

2. 반복문을 이용해서 실행하기

여기에서는 반복문을 활용하기 위해서 for 구문을 사용하였습니다.

 

x <- c("SD001", "SD002", "SD003", "SD004",...."SD048") #학교구 ID를 x라는 변수(벡터)에 할당하기

for( i in x){
 readr :: write_csv(filter(GradR, SDID == i ), path = paste( i, '_GRADUATIONRATE.csv'))
}

또는 

for( i in x){ 
 readr :: write_csv(filter(GradR, SDID == i ), path = paste0( i, '_GRADUATIONRATE.csv'))
}

paste뒤에 0없으면 파일명이 저장될 때에 i _GRADUATIONRATE.csv로 저장이 되고 0이 있으면 i_GRADUATIONRATE.csv로 저장이 된다. 즉 i 다음에 한칸이 띄어지게 하느냐 마느냐의 차이이다.

이 명령어를 실행시키면 워킹디렉터리안에 SD001_GRADUATIONRATE.csv 파일부터 SD048_GRADUATIONRATE.csv  파일까지 저장되어 있는 것을 확인할 수 있습니다.