일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- distinct()
- select()
- filter()
- groupe_by()
- proc contents
- arrange()
- samp;e_frac()
- summarize()
- 대칭형 알고리즘
- AES
- sample_n()
- dplyr
- mutate()
- Today
- Total
Gae Ko's Blog
[Data Science] dplyr의 group_by, chaining, join 본문
먼저 dplyr의 핵심 동사는 다음과 같다.
각 함수에 대하여 ☞ http://gaeko-security-hack.tistory.com/129?category=722260
※ group_by를 이용한 그룹 연산
group_by() 명령은 데이터셋을 그룹으로 나눈 후, 그룹별로 위의 연산들을 적용한다.
group_by( DF, GROUPING_VARIABLE) |
ex.
- summarize() 는 각 그룹별로 요약통계량을 계산한다.
- select()는 그룹 변수를 항상 포함
- sample_n() 과 sample_frac()는 그룹별로 랜덤 샘플링
> # 각 대륙별 기대 수명의 중간값구하기 > # 그루핑부터 해보면 다음과 같다. > gapminder %>% + filter(year==2007) %>% + group_by(continent) # A tibble: 142 x 6 # Groups: continent [5] country continent year lifeExp pop gdpPercap <fct> <fct> <int> <dbl> <int> <dbl> 1 Afghanistan Asia 2007 43.8 31889923 975 2 Albania Europe 2007 76.4 3600523 5937 3 Algeria Africa 2007 72.3 33333216 6223 4 Angola Africa 2007 42.7 12420476 4797 5 Argentina Americas 2007 75.3 40301927 12779 6 Australia Oceania 2007 81.2 20434176 34435 7 Austria Europe 2007 79.8 8199783 36126 8 Bahrain Asia 2007 75.6 708573 29796 9 Bangladesh Asia 2007 64.1 150448339 1391 10 Belgium Europe 2007 79.4 10392226 33693 # ... with 132 more rows > > > # 각 대륙별 기대 수명의 중간값구하기 > gapminder %>% + filter(year==2007) %>% + group_by(continent) %>% + summarize(median(lifeExp)) # A tibble: 5 x 2 continent `median(lifeExp)` <fct> <dbl> 1 Africa 52.9 2 Americas 72.9 3 Asia 72.4 4 Europe 78.6 5 Oceania 80.7 > |
※ dplyr 명령의 특징, 체이닝(chaining)
- 첫 번째 입력은 데이터프레임이다.
- 두 번째 입력은 주로 열이름으로 이루어진 조건/계산문이다. $ 인덱싱이 필요없음
- 결과는 데이터프레임 (tbl_df의 속성도 가진)
dplyr 명령을 사용하면 연쇄적 연산 (체이닝, chaining)이 가능하다.
연쇄적 연산이 얼마나 가독성이 좋고 코딩이 간편한지는 다음의 두가지 코드를 비교해보라.
# {base} 패키지를 사용하여 계산하는 경우 # 각 대륙별 기대 수명의 중간값을 내림차순으로 정렬 d1 = filter(gapminder, year==2007) d2 = group_by(d1, continent) d3 = summarize(d2, lifeExp = median(lifeExp)) arrange(d3, -lifeExp) # 또는 arrange( summarize( group_by( filter(gapminder, year==2007), continent ), lifeExp = median(lifeExp) ), -lifeExp ) |
# {dplyr} 패키지를 사용하여 연쇄적 연산을 사용하여 계산하는 경우 # 각 대륙별 기대 수명의 중간값을 내림차순으로 정렬 gapminder %>% filter(year==2007) %>% group_by(continent) %>% summarize(lifeExp = median(lifeExp)) %>% arrange(-lifeExp) |
연산순서를 왼쪽에서 오른쪽으로, 위에서 아래로 읽을 수 있으므로 가독성이 좋아진다.
※ 테이블을 결합하는 조인 연산자
조인(join)은 여러 테이블로부터의 변수를 결합한다.
data_frame()함수를 사용하여 예제데이터를 만들어보자.
// dplyr::data_frame()함수는 {base} 패키지의 data.frame()와 동일한 함수.
'통계 > R' 카테고리의 다른 글
[Rstudio] 작업 디렉토리 설정하기 (0) | 2018.02.20 |
---|---|
[Data Science] dplyr 핵심 동사 (0) | 2018.02.19 |
[Data Science] R의 dplyr 패키지 (0) | 2018.02.19 |
[R] apply() 함수 (0) | 2018.02.16 |
[R] 정렬하기 (0) | 2018.02.16 |