본문 바로가기

R

R 데이터프레임(DF) Group By Sum

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