데이터 형태 변환
library('tidyverse')
library('readxl')
long_data = read_xls("data_library.xls") %>%
filter(자치구=='서대문구') %>%
select(기간, 자치구, 공공도서관)
long_data
## # A tibble: 7 x 3
## 기간 자치구 공공도서관
## <chr> <chr> <dbl>
## 1 2010 서대문구 3
## 2 2011 서대문구 4
## 3 2012 서대문구 4
## 4 2013 서대문구 4
## 5 2014 서대문구 4
## 6 2015 서대문구 4
## 7 2016 서대문구 4
# 넓은 형태의 데이터로 변환
wide_data = long_data %>%
spread(key=기간, value=공공도서관)
wide_data
## # A tibble: 1 x 8
## 자치구 `2010` `2011` `2012` `2013` `2014` `2015` `2016`
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 서대문구 3 4 4 4 4 4 4
# 다시 긴 형태의 데이터로 재변환
long_data2 = wide_data %>%
gather(key=기간, value=공공도서관, -자치구)
# 자치구 변수의경우 반복측정된 변수가 아니기 때문에 "-자치구" 형태로 형태변환 대상이 아닌 경우에는 -를 붙여 주어야함
long_data2
## # A tibble: 7 x 3
## 자치구 기간 공공도서관
## <chr> <chr> <dbl>
## 1 서대문구 2010 3
## 2 서대문구 2011 4
## 3 서대문구 2012 4
## 4 서대문구 2013 4
## 5 서대문구 2014 4
## 6 서대문구 2015 4
## 7 서대문구 2016 4
조금 더 복잡한 사례
long_data = read_xls("data_library.xls") %>%
select(기간, 자치구, 공공도서관)
long_data
## # A tibble: 182 x 3
## 기간 자치구 공공도서관
## <chr> <chr> <dbl>
## 1 2010 합계 101
## 2 2010 종로구 4
## 3 2010 중구 2
## 4 2010 용산구 3
## 5 2010 성동구 4
## 6 2010 광진구 3
## 7 2010 동대문구 2
## 8 2010 중랑구 2
## 9 2010 성북구 3
## 10 2010 강북구 5
## # ... with 172 more rows
# 자치구를 key로 지정할 경우
wide_data1 = long_data %>%
spread(key=자치구, value=공공도서관)
wide_data1
## # A tibble: 7 x 27
## 기간 강남구 강동구 강북구 강서구 관악구 광진구 구로구 금천구 노원구
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2010 11 7 5 5 4 3 9 3 4
## 2 2011 11 7 5 5 5 3 10 3 5
## 3 2012 11 7 5 7 5 3 10 3 6
## 4 2013 12 7 6 8 5 3 10 4 6
## 5 2014 12 7 6 8 5 3 10 4 6
## 6 2015 12 7 6 9 5 4 10 4 6
## 7 2016 11 7 6 9 5 4 10 4 6
## # ... with 17 more variables: 도봉구 <dbl>, 동대문구 <dbl>, 동작구 <dbl>,
## # 마포구 <dbl>, 서대문구 <dbl>, 서초구 <dbl>, 성동구 <dbl>,
## # 성북구 <dbl>, 송파구 <dbl>, 양천구 <dbl>, 영등포구 <dbl>,
## # 용산구 <dbl>, 은평구 <dbl>, 종로구 <dbl>, 중구 <dbl>, 중랑구 <dbl>,
## # 합계 <dbl>
# 기간을 key로 지정할 경우
wide_data2 = long_data %>%
spread(key=기간, value=공공도서관)
wide_data2
## # A tibble: 26 x 8
## 자치구 `2010` `2011` `2012` `2013` `2014` `2015` `2016`
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 강남구 11 11 11 12 12 12 11
## 2 강동구 7 7 7 7 7 7 7
## 3 강북구 5 5 5 6 6 6 6
## 4 강서구 5 5 7 8 8 9 9
## 5 관악구 4 5 5 5 5 5 5
## 6 광진구 3 3 3 3 3 4 4
## 7 구로구 9 10 10 10 10 10 10
## 8 금천구 3 3 3 4 4 4 4
## 9 노원구 4 5 6 6 6 6 6
## 10 도봉구 4 5 5 5 5 7 7
## # ... with 16 more rows
데이터 합치기
# 두개의 데이터 열기
seoul_library = read_xls('data_library.xls')
seoul_educ = read_xls('data_student_class.xls',skip=2)
## New names:
## * 학급수 -> 학급수...4
## * 학생수 -> 학생수...6
## * 학급수 -> 학급수...7
## * 학급당학생수 -> 학급당학생수...8
## * 학생수 -> 학생수...9
## * ...
# 설명의 편의를 위해 간단한 데이터로 바꿈
mydata1 = seoul_library %>%
filter(기간==2016 & 자치구!='합계') %>%
select(1:3)
mydata2 = seoul_educ %>%
filter(기간==2016 & 지역!='합계') %>%
select(1:3)
# 변수 이름 조정 후 합치기
names(mydata1)=c('year','district','lib_total')
names(mydata2)=c('year','district','stdt_kinder')
mydata1 %>%
full_join(mydata2,by='district')
## # A tibble: 25 x 5
## year.x district lib_total year.y stdt_kinder
## <chr> <chr> <dbl> <chr> <dbl>
## 1 2016 종로구 50 2016 1330
## 2 2016 중구 57 2016 1176
## 3 2016 용산구 20 2016 1779
## 4 2016 성동구 8 2016 2584
## 5 2016 광진구 10 2016 3174
## 6 2016 동대문구 18 2016 3388
## 7 2016 중랑구 6 2016 3366
## 8 2016 성북구 21 2016 5243
## 9 2016 강북구 11 2016 2105
## 10 2016 도봉구 8 2016 3027
## # ... with 15 more rows
# 식별 변수가 2개 이상인 경우
mydata1 %>%
full_join(mydata2,by=c('year','district'))
## # A tibble: 25 x 4
## year district lib_total stdt_kinder
## <chr> <chr> <dbl> <dbl>
## 1 2016 종로구 50 1330
## 2 2016 중구 57 1176
## 3 2016 용산구 20 1779
## 4 2016 성동구 8 2584
## 5 2016 광진구 10 3174
## 6 2016 동대문구 18 3388
## 7 2016 중랑구 6 3366
## 8 2016 성북구 21 5243
## 9 2016 강북구 11 2105
## 10 2016 도봉구 8 3027
## # ... with 15 more rows