이번에는 R에서 한 폴더에 있는 파일을 우르르 함께 불러서 이걸 통합시켜 보는 일을 해보려고 합니다. 여기서 통합이라고 하면 각 파일들이 동일한 칼럼들을 갖고 있어서 (칼럼 이름이 모두 일치) rbind를 통해서 쉽게 통합시킬 때만을 생각해봅니다.
우선 특정 폴더에 있는 파일 이름을 R에 부르는 일이 필요할 겁니다. 이 경우에는 list.files라는 함수를 사용하는데요. 우선 setwd()를 통해 자신의 working directory를 정해주시고, list.files로서 여기에 있는 파일 이름을 모두 읽어준 다음에 list 형태로 파일 이름을 (filenames라는 이름으로 해보겠습니다) 저장합니다. 파일이 총 몇개나 있는지 알고 싶으면 length 함수를 통해서 파일 이름을 저장한 list를 읽어주면 됩니다.
setwd("/Users/xxx/Dropbox/googletrends")
filenames <- list.files(path=getwd())
numfiles <- length(filenames)
저는 2012년부터 2019년까지 제가 관심 있어 하는 검색어를 미국의 각 주별로 얼마나 검색했는지 매년 구글 트렌드 데이터를 긁어왔는데요. 아래처럼 모든 파일 이름들이 읽히고 각 csv 파일 총합이 8개인 것을 알고 있습니다.
이제 이 파일을 통합해봅니다. 제 데이터는 앞에서 말씀드린 것처럼 각 파일이 동일한 이름의 칼럼을 갖고 있어서 join 같은 함수가 아니라 그냥 열만 더하는 rbind() 함수를 사용하면 됩니다. 다시 말해 google_2012.csv라는 파일은 "state", "googletrends", "year" 3개 열을 갖고 있는데 google_2013, google_2014도 다 동일한 칼럼만을 갖고 있음.
MergedData <-
do.call(rbind, lapply(filenames, read.csv))
여기서는 do.call()과 lapply라는 함수를 동시에 사용했는데요. lapply는 각 파일을 read.csv라는 함수에 적용시켜라 (모든 google csv 파일이 열림), 그 다음에 이걸 rbind를 통해서 쫙 묶은 다음에 하나의 파일로 간단하게 만들어라 할 때 do.call을 사용합니다. do.call()은 rbind(칼럼 동일, 행만 더 함), cbind(행 동일, 칼럼만 더함)과 늘 함께 이용되니 잊지 마세용.
이렇게 해서 MergedData라는 걸 새로 만들었는데 이렇게 하면 google 2012년자료부터 2019년자료까지 쫙 모아서 하나의 데이터를 만들어줍니다. 데이터 한 단면을 보여드리겠습니당.
조금 다른 경우를 봐서 예를 한 폴더에 있는 모든 csv 파일을 list 형태로 입력시켜라 하면 pattern이라는 조건문을 써주면 됩니다.
myfiles = list.files(path=getwd(), pattern="*.csv", full.names=TRUE)
'R > R basic' 카테고리의 다른 글
두 개의 데이터프레임 합치기 (join 함수) (0) | 2021.04.23 |
---|---|
데이터 불러서 한 번에 통합 (plyr::ldply 함수) (0) | 2021.04.21 |
각 칼럼안에 있는 고유한 이름(혹은 값)은 몇 개나 있나 (n_distinct) (0) | 2021.04.14 |
도대체 리스트, 벡터, 매트릭스, 데이터프레임이란 무엇인가 (0) | 2021.04.10 |
R에 지금 열려 있는 데이터 지우기 (2) | 2021.04.07 |