R/R basic

이름이 비슷한 csv 파일을 불러서 통합해서 하나의 데이터프레임을 만들 경우

시키테이 2020. 5. 8. 07:53
반응형

일을 하다보면 파일 안에 있는 변수는 같은데 파일 이름은 다르지만, 이를 하나로 통합하고 싶은 경우가 있을 겁니다. 예를 들어 파일 이름이  data2000, data2001,... data2020 이렇게 있는데 이를 다 합쳐서 하나로 만들 경우가 있을 수 있죠. 이를 한 번에 불러서 하나의 정돈된 데이터프레임으로 바꿀 수 없을까요? 우선 일단 특정 폴더를 만들어서 관련 csv 파일을 다 몰아 넣는 것이 첫번째 스텝입니다. 이후에 워킹 폴더를 그 폴더로 지정해주시구요 (setwd()). 아래가 가장 흔하게 쓰는 방법입니다. 

setwd("/Users/abc/Downloads") #이것은 한 예입니다. 폴더에 맞춰 변경해주시면 됩니다. 
files = list.files(pattern="*.csv") #csv파일을 일괄적으로 불러서 리스트 형태로 통합합니다.
myfiles=do.call(rbind, lapply(files, function(x) read.csv(x, stringsAsFactors = FALSE)))

그러나 최근 dplyr의 등장으로 do.call 명령어 없이 아래처럼 더 직관적으로 할 수 있습니다. 밑의 명령문의 뜻은 files list를 일괄적으로 읽은 다음 (read_csv) 열끼리 통합시키라는 뜻입니다 (bind_rows()). 

files = list.files(pattern="*.csv")
myfiles=lapply(files, read_csv) %>% bind_rows()

검색해보니 read.csv가 느린 경우가 있어서 data.table library에 있는 fread() 함수를 쓰기도 하네요. 

library(data.table)
myfiles = do.call(rbind, lapply(files, fread))
반응형