106  arrange()の練習問題

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に、「男性」と「女性」という二つのシートが含まれています。「女性」シートのデータを取り込んでください。

これは、インポートする話ですね。

library(tidyverse)
── 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の様にバッククオートで囲んであげるほうがよいです。

dat %>% arrange(`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()関数を利用してあげると、

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
dat %>% head(1)
# A tibble: 1 × 7
  都道府県名     Prefecture `2015` `2016` `2017` `2018` `2019`
  <chr>          <chr>       <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 北海道     Hokkaido     2845   2830   2814   2797   2778
dat %>% head(5)
# 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番目の都道府県を見つけてください

dat %>% arrange(`2018`)
# 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の話です。