Table Conversion : Wide Table <-> Long Table 1. tidyr package installation2. 예제 1 : table_conversion__01.csv (Long Table)2-1. Table Conversion : Long => Wide2-2. Table Conversion : Wide => Long3. 예제 2 : table_conversion__02.csv (Long Table)3-1. Table Conversion : Long => Wide4. 예제 3 : table_conversion__03.csv (Long Table)4-1. Table Conversion : Long to Wide4-2. Table Conversion : Wide to Long
xxxxxxxxxxinstall.packages("tidyr")library(tidyr)
xxxxxxxxxxdata_table <- read.csv(file.choose(), header=T)head(data_table, 15)xxxxxxxxxx##    행정구역.시군구.별                         항목 X2019..03.월## 1          서울특별시                   총전입[명]       135592## 2          서울특별시                   총전출[명]       137242## 3          서울특별시                   순이동[명]        -1650## 4          서울특별시      시도내이동-시군구내[명]        37770## 5          서울특별시 시도내이동-시군구간 전입[명]        51496## 6          서울특별시 시도내이동-시군구간 전출[명]        51496## 7          서울특별시               시도간전입[명]        46326## 8          서울특별시               시도간전출[명]        47976## 9          부산광역시                   총전입[명]        36425## 10         부산광역시                   총전출[명]        38345## 11         부산광역시                   순이동[명]        -1920## 12         부산광역시      시도내이동-시군구내[명]        10605## 13         부산광역시 시도내이동-시군구간 전입[명]        15203## 14         부산광역시 시도내이동-시군구간 전출[명]        15203## 15         부산광역시               시도간전입[명]       
key=항목, value=X2019..03.월
단, '시도내이동-시군구내[명]'에 중복값이 있어서는 안됨.
xxxxxxxxxxwide_table <- spread(data_table, 항목, X2019..03.월)head(wide_table)xxxxxxxxxx##   행정구역.시군구.별 순이동[명] 시도간전입[명] 시도간전출[명]## 1         광주광역시       -397           6388           6785## 2         대구광역시      -2425           7429           9854## 3         대전광역시      -1193           7510           8703## 4         부산광역시      -1920          10617          12537## 5         서울특별시      -1650          46326          47976## 6     세종특별자치시       2076           4607           253
xxxxxxxxxxlong_table <- gather(wide_table, '시도간전입[명]':'총전출[명]', key="항목", value="X2019..03.월")long_tablexxxxxxxxxx##   행정구역.시군구.별 순이동[명]           항목 X2019..03.월## 1         광주광역시       -397 시도간전입[명]         6388## 2         대구광역시      -2425 시도간전입[명]         7429## 3         대전광역시      -1193 시도간전입[명]         7510## 4         부산광역시      -1920 시도간전입[명]        10617## 5         서울특별시      -1650 시도간전입[명]        46326## 6     세종특별자치시       2076 시도간전입[명]     
xxxxxxxxxxdata_table <- read.csv(file.choose(), header=T)head(data_table)xxxxxxxxxx##    행정구역.시군구.별                         항목 X2019..03.월## 1          서울특별시                   총전입[명]       135592## 2          서울특별시                   총전출[명]       137242## 3          서울특별시                   순이동[명]        -1650## 4          서울특별시      시도내이동-시군구내[명]        37770## 5          서울특별시 시도내이동-시군구간 전입[명]        51496## 6          서울특별시 시도내이동-시군구간 전출[명]        51496
key=항목, value=X2019..03.월
xxxxxxxxxxwide_table <- spread(data_table, 항목, X2019..03.월)단, '시도내이동-시군구내[명]'에 중복값이 있어서 에러가 발생됨.
xxxxxxxxxx## 에러: Each row of output must be identified by a unique combination of keys.Keys are shared for 16 rows:## * 11, 27## * 15, 31## * 16, 32## * 13, 29## * 14, 30## * 12, 28## * 9, 25## * 10, 26#### Call `rlang::last_error()` to see a backtrace
xxxxxxxxxxwide_tablexxxxxxxxxx##   행정구역.시군구.별 순이동[명] 시도간전입[명] 시도간전출[명]## 1         광주광역시       -397           6388           6785## 2         대구광역시      -2425           7429           9854## 3         대전광역시      -1193           7510           8703## 4         부산광역시      -1920          10617          12537## 5         서울특별시      -1650          46326          47976## 6     세종특별자치시       2076           4607           2531
이 경우 data file의 '시도내이동-시군구내[명]'에 있는 중복값을 수정해야 한다.
수정된 파일 : table_conversion_03.csv
xxxxxxxxxxdata_table <- read.csv(file.choose(), header=T)head(data_table)xxxxxxxxxx  행정구역.시군구.별                         항목 X2019..03.월1         서울특별시                   총전입[명]       1355922         서울특별시                   총전출[명]       1372423         서울특별시                   순이동[명]        -16504         서울특별시      시도내이동-시군구내[명]        377705         서울특별시 시도내이동-시군구간 전입[명]        514966         서울특별시 시도내이동-시군구간 전출[명]        51496
key=항목, value=X2019..03.월
xxxxxxxxxxwide_table <- spread(data_table, 항목, X2019..03.월)wide_tablexxxxxxxxxx##   행정구역.시군구.별 순이동[명] 시도간전입[명] 시도간전출[명]## 1         대구광역시      -2425           7429           9854## 2    대구광역시 중구       -171            370            364## 3         서울특별시      -1650          46326          47976## 4    서울특별시 중구        -57            615            562
xxxxxxxxxxlong_table <- gather(wide_table, '시도간전입[명]':'총전출[명]', key="항목", value="X2019..03.월")long_tablexxxxxxxxxx  행정구역.시군구.별 순이동[명]           항목 X2019..03.월1         대구광역시      -2425 시도간전입[명]         74292    대구광역시 중구       -171 시도간전입[명]          3703         서울특별시      -1650 시도간전입[명]        463264    서울특별시 중구        -57 시도간전입[명]          6155         대구광역시      -2425 시도간전출[명]         98546    대구광역시 중구       -171 시도간전출[명]