fs 패키지로 여러 파일 한 번에 병합하기
2019. 6. 11. 00:24ㆍ카테고리 없음
동일한 포맷의 여러개 파일을 동시에 불러온 다음, 일일히 bind_rows (혹은 rbind)를 해야할 때가 있다. for 반복문으로 붙이는 경우가 종종 있는데, fs 패키지를 사용할 경우 한 번에 간단히 끝낼 수 있다.
전시 카테고리
총 0 개의 데이터가 있습니다.
www.bigdatahub.co.kr
SK 데이터 허브에서, 패밀리 레스토랑 이용에 대한 월간 데이터를 병합하는 상황을 가정해보자. 2018년 1월부터 2019년 4월의 데이터를 CSV 형태로 다운받아 한 폴더에 넣어둔다.
동일한 형태로 정리가 잘되어 있기 때문에, 데이터 프레임 형식을 손볼 필요는 없다.
for 문을 사용하는 경우
library(tidyverse)
dir = 'family_restaurant'
files.list = paste0(dir,'/',list.files('family_restaurant'))
files.list
merged = NULL
for(i in seq(length(files.list))){
temp = read_csv(files.list[i] %>% toString())
merged = bind_rows(merged, temp)
}
merged %>% View()
head = c('type', 'year', 'month', 'day', 'days', 'state', 'county', 'town', 'sex', 'ages', 'ratio')
names(merged) = head
성공적으로 병합이 되었다.
fs 패키지를 사용하는 경우
library(tidyverse)
library(fs)
list = dir_info("family_restaurant",resurcive = T) %>%
filter(str_detect(path, '\\.csv$') == T)
list
dir_info는 지정한 경로에 있는 파일들의 정보를 표시한다
list2 = dir_ls('family_restaurant', glob = '*.csv')
dir_ls는 list.file과 비슷한 기능을 한다. 세부 명령어에 glob를 쓰면 *같은 와일드 카드를 사용할 수 있다.
list2 = dir_ls('family_restaurant', glob = '*.csv')
merged2 = list2 %>%
map_df(read_csv, .id = 'file', col_types = cols())
head2 = c('file','type', 'year', 'month', 'day', 'days', 'state', 'county', 'town', 'sex', 'ages', 'ratio')
names(merged2) = head2
merged2
훨씬 더 간편하게 파일이 병합된 것을 알 수 있다.
fs패키지의 보다 자세한 명령어는 아래 페이지에서 찾아볼 수 있다.
Cross-Platform File System Operations Based on 'libuv'
A cross-platform interface to file system operations, built on top of the 'libuv' C library.
fs.r-lib.org