Gae Ko's Blog

[Data Science] dplyr 핵심 동사 본문

통계/R

[Data Science] dplyr 핵심 동사

Gae Ko 2018. 2. 19. 22:34

dplyr의 핵심 동사 


dplyr의 핵심 동사는 다음과 같다.


  • filter(df, 조건) : 행 선택
  • arrange(df, 변수1, 변수2, ...) : 행 정렬
  • select(df, 변수1, 변수2, ... ) : 변수/열 선택
  • mutate(df, 타겟변수1 = 변환, ... ) : 변수 변환
  • summarize(df, 타겟변수1=통계함수, ... ) : 변수 요약
  • distinct( )
  • sample_n( ) and sample_frac( )

  • 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_gdple_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