데이터 가공

데이터 전처리

분석에 적합하게 데이터를 가공하는 작업 - dplyr 활용

조건에 맞는 데이터만 출력 - filter()

  1. class가 1인 데이터만 출력
     exam %>% filter(class == 1)
       id class math english science
     1  1     1   50      98      50
     2  2     1   60      97      60
     3  3     1   45      86      78
     4  4     1   30      98      58
    
    • dplyr 패키지는 %>% 기호를 이용하 함수들을 나열하는 방식으로 코드 작성
    • class == 1 : class 변수의 값이 1인 행
    • 함수의 파라미터 지정할 때는 등호를 한 번 쓰고, 같다를 의미할 때는 두 번쓴다
  2. class가 1이 아닌 데이터 출력
     exam %>% filter(class != 1)
    
  3. 부등호를 이용해 초과, 미만, 이상, 이하 조건을 걸 수 있다.
  4. and : &
  5. or :
  6. %in% : 변수의 값이 지정한 조건 목록에 해당하는지 확인
    • 1, 3, 5반에 해당하면 추출
       exam %>% filter(class %in% c(1,3,5))
       exam %>% filter(class == 1 | class == 3 | class == 5)
      
    • 두 결과는 같다
  7. 추출한 데이터도 <- 기호를 이용해 변수에 저장할 수 있다

필요한 변수만 추출

  • math추출
      exam %>% select(math)
    
  • 여러변수 추출
      exam %>% select(class,math,english)
    
  • 변수 제외
      exam %>% select(-math,-english)
    
  • filter()와 select() 조합하기
      # class가 1인 행만 추출하여 english호출
      exam %>%
       filter(class==1) %>%
       select(english)    
    
  • 일부만 출력 : head() 조합
      exam %>%
       select(id, math) %>%
       head
    

    정렬

  • 오름차순 정렬
      exam %>% arrange(math) #math 오름차순 정렬
    
  • 내림차순 정렬
      exam %>% arrange(desc(math)) #math 내림차순 정렬
    
  • 여러 변수기준 정렬
      exam %>% arrange(class, math)
    
    • class 오름차순 정렬 후, class 안에서 math 오름차순 정렬

파생변수 추가

  • 총합 변수 만들어서 추가
      exam %>%
       mutate(total = math + english + science ) %>%
       head
    
        id class math english science total
      1  1     1   50      98      50   198
      2  2     1   60      97      60   217
      3  3     1   45      86      78   209
      4  4     1   30      98      58   186
      5  5     2   25      80      65   170
      6  6     2   50      89      98   237
    
  • 여러 파생변수 한 번에 추가
      exam %>%
       mutate(total = math + english + science,
              mean = (math + english + science)/3) %>%
       head
    

집단별로 요약

  • summarise()
      exam %>% summarise(mean_math = mean(math))
    
        mean_math
      1     57.45
    
  • 집단별로 요약 - group_by()
      exam %>%
       group_by(class) %>%
       summarise(mean_math = mean(math))
    
      # A tibble: 5 x 2
        class mean_math
        <int>     <dbl>
      1     1      46.2
      2     2      61.2
      3     3      45  
      4     4      56.8
      5     5      78
    

데이터 합치기

  • left join : 가로로 합치기
      test1
      id midterm
      1  1      60
      2  2      80
      3  3      70
      4  4      90
      5  5      85
    
      id final
      1  1    70
      2  2    83
      3  3    65
      4  4    95
      5  5    80
    
    • id를 기준으로 합쳐 total에 할당
        total <- left_join(test1, test2, by = "id")
        total
      
      id midterm final
        1  1      60    70
        2  2      80    83
        3  3      70    65
        4  4      90    95
        5  5      85    80
      
  • bind_rows() : 세로로 합치기
      group_a
        id test
      1  1   60
      2  2   80
      3  3   70
      4  4   90
      5  5   85
    
      group_b
        id test
      1  6   70
      2  7   83
      3  8   65
      4  9   95
      5 10   80
    
    • 데이터 합쳐서 group_all에 할당
        group_all <- bind_rows(group_a, group_b)
        group_all
      
       id test
        1   1   60
        2   2   80
        3   3   70
        4   4   90
        5   5   85
        6   6   70
        7   7   83
        8   8   65
        9   9   95
        10 10   80
      

카테고리:

업데이트: