우리는 이전 포스팅에서
https://bluediary8.tistory.com/85?category=787191
R프로그래밍 - 폴더 안에 여러 csv파일들 하나로 불러 들이기 list.files 함수
이번에는 하나의 폴더안에 있는 여러 csv파일들을 R로 불려들여서 하나로 합쳐보는 코드를 작성해보겠습니다. 우선 임의의 폴더안에 여러개의 csv파일들을 복사해서 붙여넣었습니다. R이 익숙치
bluediary8.tistory.com
여러 csv파일을 합치는 과정 중에 for문과 rbind를 사용한 적이 있습니다.
코드의 형태는 다음과 같죠
final<-NULL
for(i in 1:10){
a<-c(1,2,3)
final<-rbind(final,a)
}
final
이러한 방식은 데이터를 합치거나 크롤링을 할때에 굉장히 자주사용하는 방식입니다.
그런데 데이터가 엄청 커질때에는 이러한 방식이 비효율적입니다.
그 이유는, final<-rbind(final, a) 이 부분에서 전체 큰 데이터 밑에 새로운 데이터를 붙이기 때문에
데이터가 커지면 커질수록 참조해야하는 변수의 크기(fianL0가 커지기 때문에
속도 저하가 일어납니다.
이러한 경우에는 list의 do.call문을 활용하여 속도를 높이는 방법이 있습니다.
위 코드와 같은 역할을 하는 코드를 아래와 같이 작성할 수 있습니다.
list1<-list()
for(i in 1:10){
a<-c(1,2,3)
list1[[i]]<-a
}
do.call("rbind",list1)
즉, list의 i번째 큰방에 벡터를 넣은 후,
for문이 끝난 다음에 do.call("rbind", list객체) 를 통해 list안에 있는 큰 방들에대해 rbind를 시킵니다.
do.call문을 이렇게 list의 데이터를 조금더 쉽게 다룰 수 있게 도와주는 도구입니다.
"rbind"외에 "cbind", "c"등도 적용이 가능합니다.
do.call("cbind",list1)
'R프로그래밍' 카테고리의 다른 글
R프로그래밍 - Vector , matrix, dataframe, list dimension 구하기 (0) | 2020.06.29 |
---|---|
R프로그래밍 - list 저장하기 (save / load 함수) (0) | 2020.06.29 |
R프로그래밍 - Sapply함수와 lapply함수 알아보기 (2) | 2020.06.26 |
R프로그래밍 - 문자열 분리하는 함수 str_split / list구조 (0) | 2020.06.26 |
R프로그래밍 - list함수 알아보기 (0) | 2020.06.25 |
댓글