dplyr 패키지
R공부 : dplyr 패키지 ]
dplyr의 특징
크기가 큰 데이터를 R 콘솔 등에서 출력할 때 출력하는 시간이 오래 걸리고, 콘솔이 데이터로 넘쳐나는 현상이 벌어지는데, 비교적 간단한 형태로 보여주는 함수가 있다.
- 데이터를 다루는 데 기본이 되는 5가지 함수(filter, select, arrange, mutate, summarise)가 있어서 이들을 적절히 조합해 사용하면 원하는 형태로 데이터를 변환할 수 있고, 정리할 수 있다. 또한 이런 과정들을 체인으로 묶어서 코딩할 수 있어서 굳이 중간에 임시 변수들을 만들지 않고도 작업할 수 있다.
- plyr 패키지가 split-apply-combine 논리로 만들어져 있는데, 이들 과정이 함수 안에서 숨겨져 있어서 처음에는 확 눈에 띄지 않아서 이해하기가 어렵다. dplyr 패키지에서는 이런 과정을 투명하게 진행할 수 있어서 매우 편리하다.
dplyr 패키지의 기본이 되는 5가지 함수
- filter() : 조건에 맞는 행을 골라내기
- select() : 필요한 변수(열)만 골라내기
- arrange() : 정렬하기
- mutate() : 기존의 변수(열)을 가지고 계산하여 새로운 변수를 생성하기
- summarise() : 기존의 변수를 가지고 계산하여 하나의 값으로 내놓기
# 예제 데이터 : ggplot2 패키지에 있는 diamonds을 사용함
# 두 개의 패키지를 새롭게 설치하는 방법
> install.packages(c("dplyr", "ggplot2"))
# 두 개의 패키지를 연동하는 방법
> library(dplyr)
> library(dplyr
# diamonds 데이터를 dplyr 패키지 안에 있는 tbl_df() 함수를 이용하여
# 데이터의 형태를 바꾼다. 이렇게 바꾸면 큰 데이터 프레임을 보기 쉽도록 해 준다.
> diamonds_df = tbl_df(diamonds)
## 1. filter()
# 사용법 : filter(데이터, 추출하고 싶은 행에 대한 조건)
# cut 상태가 Ideal인 행만 추출하고 싶다면
> filter(diamonds_df, cut=="Ideal")
# cut이 Ideal이고, color는 E인 행만 추출하고 싶다면 콤마(,)로 구분하면 된다. 참고로 콤마는 and 역할을 한다.
> filter(diamonds_df, cut=="Ideal", color=="E")
# cut이 Ideal이거나 color가 E인 행만 추출하고 싶다면 |로 구분하면 된다. 참고로 |가 or 역할을 한다.
> filter(diamonds_df, cut=="Ideal" | color=="E")
## 2. select()
# 사용법 : select(데이터, 추출하고 싶은 변수명이나 열 인덱스를 지정)
# 변수명이 cut과 color인 데이터를 추출하고 싶다면,
> select(diamonds, cut, color)
# 1~4열을 추출하고 싶다면
> select(diamonds, 1:4)
## 3. arrange()
# 사용법 : arrange(데이터, 정렬하고 싶은 변수명)
# cut을 기준으로 오름차순으로 정렬하고 싶다면,
> arrange(diamonds_df, cut)
# cut으로 먼저 오름차순으로 정렬하고,
# 같은 cut 상태에서는 color로 오름차순으로 정렬하고 싶다면
> arrange(diamonds_df, cut, color)
# cut을 기준으로 내림차순으로 정렬하고 싶다면
> arrange(diamonds_df, desc(cut))
## 4. mutate()
# 사용법 : mutate(데이터, 새로운 변수명 = 계산식)
# x, y, z를 합한 값을 total이라는 새로운 변수로 저장하고 싶다면,
> mutate(diamonds_df, total=(x+y+z))
## 5. summarise()
# 사용법 : summarise(데이터, 최종결과의 변수명 = 분석내용)
# x의 평균을 구해서 xMean으로, y의 평균을 구해서 yMean으로,
# z의 평균을 구해서 zMean으로 출력하고 싶다면,
> summarise(diamonds_df, xMean=mean(x), yMean=mean(y), zMean=mean(z))