arrangeの練習問題には、
https://www.e-stat.go.jp/stat-search/file-download?statInfId=000031921674&fileKind=0
にある、令和元年度の日本の人口統計データを元に、私が加工したデータを扱います。
取り込むファイルはdata/population.xlsxです。これまで学んだ関数、mutateとかも利用します。
練習問題1
data/population.xlsxに、「男性」と「女性」という二つのシートが含まれています。「女性」シートのデータを取り込んでください。
練習問題2
取り込んだデータの都道府県をアルファベット順で並べ替えてください。
練習問題3
2015年で女性人口が1-5番目の都道府県をみつけてください
練習問題4
2018年で女性人口が40-47番目の都道府県を見つけてください
練習問題5
列名を2015 -> nen2015の様に、数字ではなくアルファベット+数字の形に書き換えてください。
練習問題6
2017年から2019年にかけて女性人口が増えた都道府県、トップ3を調べてください。
それでは解説していきます
練習問題1
data/population.xlsxに、「男性」と「女性」という二つのシートが含まれています。「女性」シートのデータを取り込んでください。
これは、インポートする話ですね。
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.2 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.0
✔ ggplot2 3.4.2 ✔ tibble 3.2.1
✔ lubridate 1.9.2 ✔ tidyr 1.3.0
✔ purrr 1.0.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
dat <- read_excel("data/population.xlsx", sheet="女性")
dat
# A tibble: 47 × 7
都道府県名 Prefecture `2015` `2016` `2017` `2018` `2019`
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 北海道 Hokkaido 2845 2830 2814 2797 2778
2 青森県 Aomori-ken 694 686 678 670 661
3 岩手県 Iwate-ken 664 658 651 643 635
4 宮城県 Miyagi-ken 1194 1191 1188 1184 1179
5 秋田県 Akita-ken 543 536 528 520 512
6 山形県 Yamagata-ken 584 578 571 565 558
7 福島県 Fukushima-ken 968 960 951 941 931
8 茨城県 Ibaraki-ken 1463 1457 1450 1442 1433
9 栃木県 Tochigi-ken 993 988 983 977 970
10 群馬県 Gumma-ken 1000 996 992 987 981
# ℹ 37 more rows
うまく取り込めましたか?
ここで、数字はすべて1000単位なので、100とか書いてあれば100,000で10万人を示しています。
練習問題2
取り込んだデータの都道府県をアルファベット順で並べ替えてください。
取り込んだデータのPrefecture列にローマ字で都道府県名が記載されています。arrange、文字列型に利用するとアルファベット順で並ぶので、
dat %>% arrange(Prefecture)
# A tibble: 47 × 7
都道府県名 Prefecture `2015` `2016` `2017` `2018` `2019`
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 愛知県 Aichi-ken 3742 3752 3761 3767 3773
2 秋田県 Akita-ken 543 536 528 520 512
3 青森県 Aomori-ken 694 686 678 670 661
4 千葉県 Chiba-ken 3127 3136 3143 3150 3155
5 愛媛県 Ehime-ken 731 725 719 713 705
6 福井県 Fukui-ken 405 403 401 398 394
7 福岡県 Fukuoka-ken 2691 2692 2692 2691 2688
8 福島県 Fukushima-ken 968 960 951 941 931
9 岐阜県 Gifu-ken 1048 1043 1035 1029 1022
10 群馬県 Gumma-ken 1000 996 992 987 981
# ℹ 37 more rows
で並びました。
練習問題3
2015年で女性人口が1-5番目の都道府県をみつけてください
実は列名が数字単体であるため、2015の様にバッククオートで囲んであげるほうがよいです。
# A tibble: 47 × 7
都道府県名 Prefecture `2015` `2016` `2017` `2018` `2019`
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 鳥取県 Tottori-ken 300 298 295 293 290
2 島根県 Shimane-ken 361 358 355 352 349
3 高知県 Kochi-ken 386 382 377 373 369
4 徳島県 Tokushima-ken 396 393 389 385 381
5 福井県 Fukui-ken 405 403 401 398 394
6 山梨県 Yamanashi-ken 427 424 421 417 414
7 佐賀県 Saga-ken 440 437 434 432 429
8 香川県 Kagawa-ken 504 502 499 496 492
9 和歌山県 Wakayama-ken 510 505 501 495 490
10 秋田県 Akita-ken 543 536 528 520 512
# ℹ 37 more rows
だと、最下位(一番数字が小さい)が上にきてしまうので、
dat %>% arrange(desc(`2015`))
# A tibble: 47 × 7
都道府県名 Prefecture `2015` `2016` `2017` `2018` `2019`
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 東京都 Tokyo-to 6849 6907 6964 7020 7075
2 大阪府 Osaka-fu 4583 4583 4583 4581 4582
3 神奈川県 Kanagawa-ken 4567 4580 4590 4601 4613
4 愛知県 Aichi-ken 3742 3752 3761 3767 3773
5 埼玉県 Saitama-ken 3638 3651 3662 3672 3682
6 千葉県 Chiba-ken 3127 3136 3143 3150 3155
7 兵庫県 Hyogo-ken 2893 2887 2879 2870 2861
8 北海道 Hokkaido 2845 2830 2814 2797 2778
9 福岡県 Fukuoka-ken 2691 2692 2692 2691 2688
10 静岡県 Shizuoka-ken 1879 1872 1866 1856 1847
# ℹ 37 more rows
で並び替えるとOKです。ちなみに、Top5だけをとりだしたいなら、上からXこ取り出してくれる、head()関数を利用してあげると、
# A tibble: 47 × 7
都道府県名 Prefecture `2015` `2016` `2017` `2018` `2019`
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 北海道 Hokkaido 2845 2830 2814 2797 2778
2 青森県 Aomori-ken 694 686 678 670 661
3 岩手県 Iwate-ken 664 658 651 643 635
4 宮城県 Miyagi-ken 1194 1191 1188 1184 1179
5 秋田県 Akita-ken 543 536 528 520 512
6 山形県 Yamagata-ken 584 578 571 565 558
7 福島県 Fukushima-ken 968 960 951 941 931
8 茨城県 Ibaraki-ken 1463 1457 1450 1442 1433
9 栃木県 Tochigi-ken 993 988 983 977 970
10 群馬県 Gumma-ken 1000 996 992 987 981
# ℹ 37 more rows
# A tibble: 1 × 7
都道府県名 Prefecture `2015` `2016` `2017` `2018` `2019`
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 北海道 Hokkaido 2845 2830 2814 2797 2778
# A tibble: 5 × 7
都道府県名 Prefecture `2015` `2016` `2017` `2018` `2019`
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 北海道 Hokkaido 2845 2830 2814 2797 2778
2 青森県 Aomori-ken 694 686 678 670 661
3 岩手県 Iwate-ken 664 658 651 643 635
4 宮城県 Miyagi-ken 1194 1191 1188 1184 1179
5 秋田県 Akita-ken 543 536 528 520 512
dat %>% arrange(desc(`2015`)) %>% head(5)
# A tibble: 5 × 7
都道府県名 Prefecture `2015` `2016` `2017` `2018` `2019`
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 東京都 Tokyo-to 6849 6907 6964 7020 7075
2 大阪府 Osaka-fu 4583 4583 4583 4581 4582
3 神奈川県 Kanagawa-ken 4567 4580 4590 4601 4613
4 愛知県 Aichi-ken 3742 3752 3761 3767 3773
5 埼玉県 Saitama-ken 3638 3651 3662 3672 3682
で上5個を取得できました。
練習問題4
2018年で女性人口が40-47番目の都道府県を見つけてください
# A tibble: 47 × 7
都道府県名 Prefecture `2015` `2016` `2017` `2018` `2019`
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 鳥取県 Tottori-ken 300 298 295 293 290
2 島根県 Shimane-ken 361 358 355 352 349
3 高知県 Kochi-ken 386 382 377 373 369
4 徳島県 Tokushima-ken 396 393 389 385 381
5 福井県 Fukui-ken 405 403 401 398 394
6 山梨県 Yamanashi-ken 427 424 421 417 414
7 佐賀県 Saga-ken 440 437 434 432 429
8 和歌山県 Wakayama-ken 510 505 501 495 490
9 香川県 Kagawa-ken 504 502 499 496 492
10 秋田県 Akita-ken 543 536 528 520 512
# ℹ 37 more rows
あるいは、tail関数というデータの最後のX行を取得してくれる関数もあるので、
dat %>% arrange(desc(`2018`)) %>% tail(8)
# A tibble: 8 × 7
都道府県名 Prefecture `2015` `2016` `2017` `2018` `2019`
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 和歌山県 Wakayama-ken 510 505 501 495 490
2 佐賀県 Saga-ken 440 437 434 432 429
3 山梨県 Yamanashi-ken 427 424 421 417 414
4 福井県 Fukui-ken 405 403 401 398 394
5 徳島県 Tokushima-ken 396 393 389 385 381
6 高知県 Kochi-ken 386 382 377 373 369
7 島根県 Shimane-ken 361 358 355 352 349
8 鳥取県 Tottori-ken 300 298 295 293 290
dat %>% arrange(`2018`) %>% head(8)
# A tibble: 8 × 7
都道府県名 Prefecture `2015` `2016` `2017` `2018` `2019`
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 鳥取県 Tottori-ken 300 298 295 293 290
2 島根県 Shimane-ken 361 358 355 352 349
3 高知県 Kochi-ken 386 382 377 373 369
4 徳島県 Tokushima-ken 396 393 389 385 381
5 福井県 Fukui-ken 405 403 401 398 394
6 山梨県 Yamanashi-ken 427 424 421 417 414
7 佐賀県 Saga-ken 440 437 434 432 429
8 和歌山県 Wakayama-ken 510 505 501 495 490
などでも調べることができます。
練習問題5
列名を2015 -> nen2015の様に、数字ではなくアルファベット+数字の形に書き換えてください。
いちいちバッククオートで囲むのも、面倒なので、列名を変えてしまいましょう。
dat2 <- dat %>%
rename(
nen2015=`2015`,
nen2016=`2016`,
nen2017=`2017`,
nen2018=`2018`,
nen2019=`2019`,
)
dat2
# A tibble: 47 × 7
都道府県名 Prefecture nen2015 nen2016 nen2017 nen2018 nen2019
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 北海道 Hokkaido 2845 2830 2814 2797 2778
2 青森県 Aomori-ken 694 686 678 670 661
3 岩手県 Iwate-ken 664 658 651 643 635
4 宮城県 Miyagi-ken 1194 1191 1188 1184 1179
5 秋田県 Akita-ken 543 536 528 520 512
6 山形県 Yamagata-ken 584 578 571 565 558
7 福島県 Fukushima-ken 968 960 951 941 931
8 茨城県 Ibaraki-ken 1463 1457 1450 1442 1433
9 栃木県 Tochigi-ken 993 988 983 977 970
10 群馬県 Gumma-ken 1000 996 992 987 981
# ℹ 37 more rows
練習問題6
2017年から2019年にかけて女性人口が増えた都道府県、トップ3を調べてください。
ここでは、2019年ー2017年としてあげてその差を大きい順にならべる作戦で行きましょう。ついでにいらないnen20xxのデータは消しておきます
dat2 %>%
select(!c(nen2015,nen2016,nen2018)) %>%
mutate(diff = nen2019 - nen2017) %>%
arrange(desc(diff))
# A tibble: 47 × 5
都道府県名 Prefecture nen2017 nen2019 diff
<chr> <chr> <dbl> <dbl> <dbl>
1 東京都 Tokyo-to 6964 7075 111
2 神奈川県 Kanagawa-ken 4590 4613 23
3 埼玉県 Saitama-ken 3662 3682 20
4 千葉県 Chiba-ken 3143 3155 12
5 愛知県 Aichi-ken 3761 3773 12
6 沖縄県 Okinawa-ken 734 738 4
7 滋賀県 Shiga-ken 716 715 -1
8 大阪府 Osaka-fu 4583 4582 -1
9 福岡県 Fukuoka-ken 2692 2688 -4
10 鳥取県 Tottori-ken 295 290 -5
# ℹ 37 more rows
ということで、東京、神奈川、埼玉が女性人口増加トップ3ということでした。東京圧倒的なのと、7位以降が全部マイナスという結果ですね。
いかがでしたでしょうか?
これまでと違い、少し実践的な感じになってきていませんでしょうか?
次は、行を絞り込む、filterの話です。