안녕하세요. 슬기로운 직장생활 블로그 운영자 입니다.
100만행이 넘는 자료를 R로 읽어들이는 방법을 소개해드린적 있습니다.
data.table페키지의 fread를 통한 방법이었죠, 여러개의 파일을 읽어야 하는 경우에는 lapply를 사용한 다음 rbindlist를 통해 처리할 수 있었습니다.
그럼 이번에는 reshape2, dplyr 페키지를 이용하여 r로 피벗테이블을 그리고 이것을 출력하는 방법을 배워보겠습니다.
- reshape2 , dplyr, data.table 패키지를 설치한다.
- 패키지를 불러온다.
- csv로 저장한 데이터를 읽어온다. (여러개로 나눠져 있으면 rbindlist로 합친다.)
- dcast, melt 함수를 사용해서 피벗테이블을 그린다.
- write.table 함수를 사용해서 피벗테이블을 csv로 출력한다.
1. install.packages(c("reshpae2", "dplyr", "data.table")) 로 실행
2. library(c("reshpae2", "dplyr", "data.table")) 로 실행/에러뜨면 하나씩 불러오면서 에러창 해소.
3. fread, lapply, rbindlist를 쓴다. 이전 블로그 참고
4. 이 부분이 이번 글의 핵심이 되겠습니다.
5. 피벗테이블 결과를 변수로 저장한 다음에, 그 변수를 write.talbe함수를 써서 파일로 내보낸다.
그럼 이제 4번 부분을 다뤄볼게요.
melt 함수를 쓰면 여러개의 값이 포함된 다중 열을 만들 수 있어요.
예를들어 거래건수, 거래금액을 같이 표기하는 표를 만들고 싶다면 melt를 사용해야 합니다.
dplyr 의 summarize함수를 통해도 피벗을 할 수 있지만..한가지 값만 지원하더군요.
그래서 다중피벗을 위해 melt 함수와 dcast함수를 쓰게 됩니다.
순번 | 거래금액 | 거래건수 | 거래유형 | 계열사 | 거래기업 |
1 | 100 | 2 | 외상 | 1군 계열사 | A사 |
2 | ... | ... | ... | ... | ... |
data를 abc로 저장했다고 합시다.
데이터가 위와 같고 몇백만개가 있다고 합시다. 대기업 계열사의 거래금액을 거래기업별로 정리하고 싶다고 할 때, 어떤식으로 피벗이 될까요?
구분 | A사 | B사 |
1군 계열사 | ||
2군 계열사 | ||
3군 계열사 |
이런식으로 요약 된다고 했을 때, 관련 코드는 다음과 같습니다.
pivot2<-melt(abc, id.vars=c("계열사","거래기업"), mesure.var="거래금액"))
result<-dcast(pivot2, 계열사~거래기업, value.var="value", margins=TRUE, fun.aggregate=sum, na.rm=T)
만약에 거래금액과 거래건수까지 피벗을하고 싶다면 어떻게 될까요?
구분 | A사 | B사 | ||
거래건수 | 거래금액 | 거래건수 | 거래금액 | |
1군 계열사 | ||||
2군 계열사 | ||||
3군 계열사 |
이런식으로 요약 된다고 했을 때, 관련 코드는 다음과 같습니다.
pivot3<-melt(abc, id.vars=c("계열사","거래기업"), mesure.var=c("거래금액","거래건수"))
result2<-dcast(pivot3, 계열사~거래기업+variable, value.var="value", margins=TRUE, fun.aggregate=sum, na.rm=T)
위의 코드와 비교하면 dacst에 +variable이 붙었죠, 그리고 melt에서 mesure.var에 거래건수가 추가 되었습니다.
마치 엑셀에서 피벗할 때 값에 거래금액과, 거래건수를 넣는것과 마찬가지인 거죠.
오늘의 포스팅은 여기서 마치겠습니다. 행복한 직장생활 되시기 바랍니다.
100만개가 넘어도 600백만개가 넘어도 통하는 R로 엑셀의 피벗기능 대신하기였습니다.
'직장에서 가끔 사용하는 R 기능' 카테고리의 다른 글
파이썬으로 갈아탑니다. (0) | 2021.07.22 |
---|---|
엑셀파일(xlsx)을 CSV형식으로 변환하기 전 주의사항 (0) | 2020.11.04 |
100만행 넘는 데이터 R에서 손쉽게 다루기(Excel은 못해요)#0 (0) | 2020.09.30 |
R과 R스튜디오 설치하기(Installing R) (0) | 2020.09.29 |