ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [R] dplyr 패키지로 데이터 전처리 하기 (2)
    Data Analysis/R 2022. 12. 15. 16:39
    반응형
    파생변수 추가

    mutate() : 새로운 파생 변수를 만드는 함수로 수식과 함께 사용

     

    #데이터 불러오기
    data <- iris
    data
    head(data)
    
    library(dplyr)
    
    #파생변수 생성
    data %>%
      mutate(total = Sepal.Length + Sepal.Width + Petal.Length + Petal.Width) %>%
      head
     Sepal.Length Sepal.Width Petal.Length Petal.Width Species total
    1          5.1         3.5          1.4         0.2  setosa  10.2
    2          4.9         3.0          1.4         0.2  setosa   9.5
    3          4.7         3.2          1.3         0.2  setosa   9.4
    4          4.6         3.1          1.5         0.2  setosa   9.4
    5          5.0         3.6          1.4         0.2  setosa  10.2
    6          5.4         3.9          1.7         0.4  setosa  11.4

    mutate를 사용해서 total이라는 새로운 파생변수를 생성해 보았습니다.

     

     

    여러 파생변수 한번에 생성하기

    data %>%
      mutate(total = Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
             mean = (total = Sepal.Length + Sepal.Width + Petal.Length + Petal.Width)/3)%>%
      head
      Sepal.Length Sepal.Width Petal.Length Petal.Width Species total     mean
    1          5.1         3.5          1.4         0.2  setosa  10.2 3.400000
    2          4.9         3.0          1.4         0.2  setosa   9.5 3.166667
    3          4.7         3.2          1.3         0.2  setosa   9.4 3.133333
    4          4.6         3.1          1.5         0.2  setosa   9.4 3.133333
    5          5.0         3.6          1.4         0.2  setosa  10.2 3.400000
    6          5.4         3.9          1.7         0.4  setosa  11.4 3.800000

    여러개의 파생변수를 생성하고 싶으면   , 로 연결하여 작성하면 됩니다.

     

     

    ◼ ifelse로 조건 부여하기

    data %>%
      mutate(result = ifelse(Sepal.Length > 5, "pass", "fail")) %>%
      head
      Sepal.Length Sepal.Width Petal.Length Petal.Width Species result
    1          5.1         3.5          1.4         0.2  setosa   pass
    2          4.9         3.0          1.4         0.2  setosa   fail
    3          4.7         3.2          1.3         0.2  setosa   fail
    4          4.6         3.1          1.5         0.2  setosa   fail
    5          5.0         3.6          1.4         0.2  setosa   fail
    6          5.4         3.9          1.7         0.4  setosa   pass

    조건을 주고 조건을 만족하면 pass를 출력하고, 그렇지 않으면 fail을 출력이 되어

    result라는 새로운 변수에 저장을 해보았습니다.

     

     

    ​집단별로 요약

    -group_by() : 변수별로 데이터를 분리하는 함수

    -summarise() : 요약통계량을 산출하는 함수

    data%>%
      group_by(Species)%>%
      summarise(mean_Sepal_Length = mean(Sepal.Length))
    # A tibble: 3 × 2
      Species    mean_Sepal_Length
      <fct>                  <dbl>
    1 setosa                  5.01
    2 versicolor              5.94
    3 virginica               6.59

    Species별로 Sepal.Length의 평균을 구해보았습니다.

     

     

    ◼ 여러 요약통계량 한번에 산출

    data %>%
      group_by(Species)%>%                                    #Species별로 분리
      summarise(mean_sepal_length = mean(Sepal.Length),       #평균
                min_sepal_length = min(Sepal.Length),         #최소값
                median_sepal_length = median(Sepal.Length),   #중앙값
                n = n())                                      #행 개수
    # A tibble: 3 × 5
      Species    mean_sepal_length min_sepal_length median_sepal_length     n
      <fct>                  <dbl>            <dbl>               <dbl> <int>
    1 setosa                  5.01              4.3                 5      50
    2 versicolor              5.94              4.9                 5.9    50
    3 virginica               6.59              4.9                 6.5    50

     

    n()데이터가 몇 행으로 되어 있는지를 구하는 기능을 합니다.

    group_by를 사용해서 Species로 집단을 나누었기 때문에 분꽃의 종류별 수가 됩니다.

    n()은 특정 변수에 적용하는게 아니기 때문에 괄호 안에 변수명을 입력하지 않습니다.

     

    ◼ 두 집단으로 나누기

    ggplot2 패키지에서 제공하는 mpg 데이터를 이용해 하위 집단별 평균을 구해보겠습니다.

    먼저, 자동차 제조 회사별로 집단을 나누고 다시 구동 방식별로 나눠서 도시 연비 평균을 구해보겠습니다.

    library(ggplot2)
    
    mpg %>%
      group_by(manufacturer, drv)%>%
      summarise(mean_cty = mean(cty))%>%
    # A tibble: 22 × 3
    # Groups:   manufacturer [15]
       manufacturer drv   mean_cty
       <chr>        <chr>    <dbl>
     1 audi         4         16.8
     2 audi         f         18.9
     3 chevrolet    4         12.5
     4 chevrolet    f         18.8
     5 chevrolet    r         14.1
     6 dodge        4         12  
     7 dodge        f         15.8
     8 ford         4         13.3
     9 ford         r         14.8
    10 honda        f         24.4
    # … with 12 more rows

    각 회사별로 구동 방식에 따른 연비가 출력되었습니다.

     

    dplyr 함수 조합하기

     

    제조 회사별로 suv 자동차의 도시 및 고속도로
    통합연비 평균을 구해 내림차순으로 정렬하고,
    1~3위까지 출력해라

     

    mpg %>%
      group_by(manufacturer) %>%                  #회사별로 분리
      filter(class == "suv") %>%                  # suv 추출
      mutate(tot = (cty + hwy)/2) %>%             # 통합 연비 변수 생성
      summarise(mean_tot = mean(tot)) %>%         # 통합 연비 평균 산출
      arrange(desc(mean_tot)) %>%                 # 내림차순 정렬
      head(3)                                     # 1-3위까지 출력
    # A tibble: 3 × 2
      manufacturer mean_tot
      <chr>           <dbl>
    1 subaru           21.9
    2 toyota           16.3
    3 nissan           15.9

    지금까지 배운 함수들을 종합해서 원하는 데이터만 추출해 보았습니다.

     

    [R] dplyr 패키지로 데이터 전처리 하기(1) 

    https://summerindata.tistory.com/3

    dplyr 패키지는 함수를 조합하면 유용하고, 복잡해 보이는 분석도 간단하게 해결할 수 있습니다.

    잘 정리해서 분석에 유용하게 사용하시길 바랍니다!

    반응형

    댓글

Designed by Tistory.