R에서 데이터프레임을 Group by Sum하는 방법이다.
우선 샘플 데이터프레임을 생성하자
data <- data.frame(
date = c('2013-12-01','2013-12-02','2013-12-03','2013-12-04','2013-12-05','2013-12-06','2013-12-07','2013-12-10'),
count = c(1,2,3,4,5,3,5,7),
price = c(500,3000,10000,50,600,30,100,560),
store = c('강남점','신림점','홍대점','건대점','신촌점', '강남점', '신림점', '홍대점')
)
생성한 데이터를 확인해보면!
## date count price store
## [1,] 2013-12-01 1 500 강남점
## [2,] 2013-12-02 2 3000 신림점
## [3,] 2013-12-03 3 10000 홍대점
## [4,] 2013-12-04 4 50 건대점
## [5,] 2013-12-05 5 600 신촌점
## [6,] 2013-12-06 3 30 강남점
## [7,] 2013-12-07 5 100 신림점
## [8,] 2013-12-10 7 560 홍대점
여기서 store를 Group Key하여 price의 Sum값을 내보자.
우리에게 익숙한 SQL로 간단하게 표현해보면 아래와 같을 것이다.
SELECT SUM(price) FROM data GROUP BY store
이를 R코드를 작성해보면!
##PRICE GROUP BY SUM
aggregate(data$price, by=list(data$store), FUN=sum)
##COUNT GROUP BY SUM
aggregate(data$count, by=list(data$store), FUN=sum)
참 간단하다.
여기서 data.table library를 사용하는 방법은 아래와 같다.
(data.table 을 사용하는 이유는 data.frame보다 속도도 빠르며 유용한 메소드를 제공한다.)
library(data.table)
data <- data.table(data)
data[, sum(price), by="store"]
결과값을 확인해보면!
## store V1(or x)
## [1,] 강남점 530
## [2,] 신림점 3100
## [3,] 홍대점 10560
## [4,] 건대점 50
## [5,] 신촌점 600
참 쉽죠?! ㅋㅋ
'R' 카테고리의 다른 글
R 데이터프레임(DF) Select Column (0) | 2014.01.17 |
---|---|
R 데이터프레임(DF) 조건 검색 (1) | 2013.12.02 |
R PDF생성 시 한글폰트 깨짐 문제 (4) | 2013.10.21 |