데이터 가공
데이터 전처리
분석에 적합하게 데이터를 가공하는 작업 - dplyr 활용
조건에 맞는 데이터만 출력 - filter()
- 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인 행
- 함수의 파라미터 지정할 때는 등호를 한 번 쓰고, 같다를 의미할 때는 두 번쓴다
- class가 1이 아닌 데이터 출력
exam %>% filter(class != 1)
- 부등호를 이용해 초과, 미만, 이상, 이하 조건을 걸 수 있다.
- and : &
-
or : - %in% : 변수의 값이 지정한 조건 목록에 해당하는지 확인
- 1, 3, 5반에 해당하면 추출
exam %>% filter(class %in% c(1,3,5)) exam %>% filter(class == 1 | class == 3 | class == 5)
- 두 결과는 같다
- 1, 3, 5반에 해당하면 추출
- 추출한 데이터도 <- 기호를 이용해 변수에 저장할 수 있다
필요한 변수만 추출
- 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
- id를 기준으로 합쳐 total에 할당
- 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
- 데이터 합쳐서 group_all에 할당