일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- distinct()
- 대칭형 알고리즘
- samp;e_frac()
- filter()
- dplyr
- sample_n()
- groupe_by()
- proc contents
- summarize()
- select()
- mutate()
- arrange()
- AES
- Today
- Total
Gae Ko's Blog
[Data Science] dplyr 핵심 동사 본문
dplyr의 핵심 동사
dplyr의 핵심 동사는 다음과 같다.
1. 행을 선택하는 filter()
filter( DF, 필터링 조건) |
조건에 맞는 행을 추출해준다.
첫번째 파라미터는 데이터프레임, 두 번째 파라미터는 필터링 조건이다.
# 예제데이터 gapminder패키지와 dplyr 패키지 로드 # library(gapminder) # library(dplyr) # gapminder 데이터에서 한국 데이터, 2007년 데이터, 한국 2007년 데이터를 추출 filter(gapminder, country=='Korea, Rep.') filter(gapminder, year==2007) filter(gapminder, country=='Korea, Rep.' & year==2007) # %>%연산자를 사용하면 다음과 같다. gapminder %>% filter(country=='Korea, Rep.') gapminder %>% filter(year==2007) gapminder %>% filter(country=='Korea, Rep.' & year==2007) |
dplyr의 함수들은 변수를 지칭할 때 df$var1 식으로 언급하지 않고 var1 식으로 지칭하면 된다.
(데이터 프레임의 변수 선택을 위한 $ 연산자를 사용할 필요 없음)
2. 행을 정렬하는 arrange()
arrange( DF, 정렬기준으로 할 변수1, 변수2, ... ) |
행을 변수들의 오름차순으로 정렬해준다.
# gapminder 데이터를 year,country 변수 순으로 정렬 arrange(gapminder, year, country) gapminder %>% arrange(year, country) |
3. 열을 선택하는 select()
select( DF, 선택할 변수1, 변수2, ... ) |
필요한 열만을 추출해준다. 필요한 변수들만 추출.
열 이름을 써주는 연산이 가장 흔히 사용된다고 한다.
# gapminder 데이터에서 pop열과 gdpPercap열을 추출 select(gapminder, pop, gdpPercap) gapminder %>% select(pop, gdpPercap) |
4. 변수를 변환하거나 생성해주는 mutate()
기존의 변수들을 변환한 결과를 기존 변수나 새변수에 할당한다.
생성된 변수는 곧바로 다음 변수의 계산에 사용될 수 있음
gapminder %>% mutate(total_gdp = pop*gdpPercap, le_gdp_ratio = lifeExp/gdpPercap, lgrk = le_gdp_ratio*100) # lgrk 변수를 생성할 때 앞에서 정의한 le_gdp_ratio변수를 바로 사용할 수 있음. |
결과는 기존의 데이터셋에 새로 바뀐 변수가 추가되거나 변경된 변수의 결과가 적용되어 보여준다.
다음은 위 코드의 결과이다. total_gdp, le_gdp_ratio, lgrk 이 새로 생성된 변수
> gapminder %>% + mutate(total_gdp = pop*gdpPercap, + le_gdp_ratio = lifeExp/gdpPercap, + lgrk = le_gdp_ratio*100) # A tibble: 1,704 x 9 country continent year lifeExp pop gdpPercap total_gdp le_gdp_ratio lgrk <fct> <fct> <int> <dbl> <int> <dbl> <dbl> <dbl> <dbl> 1 Afghanistan Asia 1952 28.8 8425333 779 6567086330 0.0370 3.70 2 Afghanistan Asia 1957 30.3 9240934 821 7585448670 0.0370 3.70 3 Afghanistan Asia 1962 32.0 10267083 853 8758855797 0.0375 3.75 4 Afghanistan Asia 1967 34.0 11537966 836 9648014150 0.0407 4.07 5 Afghanistan Asia 1972 36.1 13079460 740 9678553274 0.0488 4.88 6 Afghanistan Asia 1977 38.4 14880372 786 11697659231 0.0489 4.89 7 Afghanistan Asia 1982 39.9 12881816 978 12598563401 0.0408 4.08 8 Afghanistan Asia 1987 40.8 13867957 852 11820990309 0.0479 4.79 9 Afghanistan Asia 1992 41.7 16317921 649 10595901589 0.0642 6.42 10 Afghanistan Asia 1997 41.8 22227415 635 14121995875 0.0657 6.57 # ... with 1,694 more rows |
만약 새롭게 만든 변수들만으로 이루어진 데이터셋을 만들고 싶다면 transmute()함수를 사용해라.
5. 요약통계량을 계산하는 summarize()
데이터 프레임을 한줄(행)으로 요약해준다.
gapminder %>% summarize(n_obs = n(), n_counrtries = n_distinct(country), med_gfpc = median(gdpPercap), max_gdppc = max(gdpPercap)) |
summarize함수는 group_by()를 이용하여 그룹화된 데이터에 적용되면 더 강력하다.
그룹화되지 않은 데이터는 전체 데이처가 하나의 그룹으로 간주된다.
dplyr에서 제공하는 요약함수로는 다음과 같은 것들이 있다.
- n() : 현재 그룹의 관측치 개수
- n_distinct(x) : 그룹 내 변수 x의 고유한 값의 개수
- first(x), last(x), nth(x, n) : 그룹 내 x 변수의 첫 번째, 마지막, n번째 관측치를 반환 // x[1], x[length(x)], x[n] 과 동일
6. 랜덤 샘플링을 위한 sample_n()과 sample_frac()
sample_n()는 정해진 숫자의 행을 랜덤 샘플링한다.
sample_frac()함수는 정해진 비율의 행을 랜덤샘플링한다.
# 각각 10줄을, 그리고 1%의 랜덤 샘플링 gapminder %>% sample_n(10) gapminder %>% sample_frac(0.01) |
디폴트는 비복원추출(sampling without replacement)을 행한다.
replace=TRUE 옵션으로 복원추출(sampling with replacement)을 할 수 있다.
또한 weight옵션으로 가중치를 지정할 수 있다.
재현 가능한 연구를 위해서는 베이스 패키지의 sample()함수에서와 마찮가지로 set.seed()를 해주면 됨
set.seed(1) # 추가해주기만 하면 됨. gapminder %>% sample_n(10) gapminder %>% sample_frac(0.01) |
7. 고유한 행을 찾아내는 distinct()
테이블에서 고유한 행을 찾아낸다. // 중복없는 유일한 값 추출
distinct( DF, 기준 VAR1, 기준 VAR2, .... ) 형식으로 중복없는 유일한 값을 추출하고자 하는 기준 변수를 기입.
{base} 패키지의 unique()함수와 매우 비슷한 기능을 수행하며, dplyr 패키지의 distinct()가 c언어로 짜여져서 속도가 더 빠름.
# gapminder 데이터의 country변수 기준으로 중복없는 유일한 값을 추출 distinct(select(gapminder, country)) # # 위 코드를 파이프 연산자를 이용하면 다음과 같다. gapminder %>% select(country) %>% distinct() |
> gapminder %>% select(country, year) %>% distinct() # country와 year 변수 기준으로 고유한 값을 추출 # A tibble: 1,704 x 2 country year <fct> <int> 1 Afghanistan 1952 2 Afghanistan 1957 3 Afghanistan 1962 4 Afghanistan 1967 5 Afghanistan 1972 6 Afghanistan 1977 7 Afghanistan 1982 8 Afghanistan 1987 9 Afghanistan 1992 10 Afghanistan 1997 # ... with 1,694 more rows |
'통계 > R' 카테고리의 다른 글
[Rstudio] 작업 디렉토리 설정하기 (0) | 2018.02.20 |
---|---|
[Data Science] dplyr의 group_by, chaining, join (0) | 2018.02.20 |
[Data Science] R의 dplyr 패키지 (0) | 2018.02.19 |
[R] apply() 함수 (0) | 2018.02.16 |
[R] 정렬하기 (0) | 2018.02.16 |