11/ データ・ハンドリング(3)
関西大学総合情報学部
すぐに実習できるように準備しておきましょう。
bind_rows()を利用:変数名が一致する必要がある
ID、Name、Scoreで構成されている。
ID、Name、Scoreの順番は一致しなくても良い(上のdata.frameの順番に調整される)。結合前のデータ識別変数の追加
list()でまとめ、.id引数を追加するlist()の内部では"識別変数の値" = 結合するデータと定義例) 結合後、Classという列を追加し、元々Data1だった行は"1組"、Data2だった行には"2組"を格納する。
*_join():結合に使う識別用の変数(キー変数)が必要(以下ではCity)
結合後
識別子は両データに含まれているが、一致しないケースがある。
left_join()
right_join()
inner_join()
full_join()
left_join()の仕組みleft_join(データ1, データ2, by = "識別用変数名")
NA)で埋められる

right_join()の仕組みright_join(データ1, データ2, by = "識別用変数名")
NA)で埋められる

inner_join()の仕組みinner_join(データ1, データ2, by = "識別用変数名")


full_join()の仕組みfull_join(データ1, データ2, by = "識別用変数名")
NA)で埋められる

by = "識別用の変数名"は複数用いることも可能(例:都道府県名&年度で結合)
by = c("識別用の変数名1", "識別用の変数名2")Tidy data:Hadley Wickhamが提唱したデータ分析に適したデータ構造



2020年8月24日という値がある場合


filter()関数等で、異なる単位の行を除外


雑然データから整然データへ変形をサポートするパッケージ
pivot_longer():Wide型データからLong型データへ
pivot_wider():Long型データからWide型データへ
separate():セルの分割(「年月日」から「年」、「月」、「日」へ)
filter()などで除外covid_sample.csv:中国、日本、韓国、モンゴル、台湾の5日間COVID-19新規感染者数
# A tibble: 5 × 7
Country Population `2022/06/09` `2022/06/10` `2022/06/11` `2022/06/12`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 China 1447470092 819 848 1114 990
2 Japan 126476461 16788 15584 15338 13381
3 Korea 51269185 9304 8428 7382 3828
4 Mongolia 3278290 0 0 0 0
5 Taiwan 23816775 72846 68293 79616 50567
# ℹ 1 more variable: `2022/06/13` <dbl>
| Country | Population | 2022/06/09 | 2022/06/10 | 2022/06/11 | 2022/06/12 | 2022/06/13 |
|---|---|---|---|---|---|---|
| China | 1447470092 | 819 | 848 | 1114 | 990 | 957 |
| Japan | 126476461 | 16788 | 15584 | 15338 | 13381 | 7942 |
| Korea | 51269185 | 9304 | 8428 | 7382 | 3828 | 9768 |
| Mongolia | 3278290 | 0 | 0 | 0 | 0 | 1055 |
| Taiwan | 23816775 | 72846 | 68293 | 79616 | 50567 | 45100 |
COVID_dfの構造は?
# A tibble: 25 × 4
Country Population Date New_Cases
<chr> <dbl> <chr> <dbl>
1 China 1447470092 2022/06/09 819
2 China 1447470092 2022/06/10 848
3 China 1447470092 2022/06/11 1114
4 China 1447470092 2022/06/12 990
5 China 1447470092 2022/06/13 957
6 Japan 126476461 2022/06/09 16788
7 Japan 126476461 2022/06/10 15584
8 Japan 126476461 2022/06/11 15338
9 Japan 126476461 2022/06/12 13381
10 Japan 126476461 2022/06/13 7942
# ℹ 15 more rows
pivot_longer():Wide to Longcolsはdplyr::select()と同じ使い方
c()で個別の変数名を指定することも、:やstarts_with()、!、-を使うこともOK`か"で囲む。
/や-など)が含まれるケースが多い。pivot_longer():WideからLongへcols = starts_with("2022")もOK# A tibble: 25 × 4
Country Population Date New_Cases
<chr> <dbl> <chr> <dbl>
1 China 1447470092 2022/06/09 819
2 China 1447470092 2022/06/10 848
3 China 1447470092 2022/06/11 1114
4 China 1447470092 2022/06/12 990
5 China 1447470092 2022/06/13 957
6 Japan 126476461 2022/06/09 16788
7 Japan 126476461 2022/06/10 15584
8 Japan 126476461 2022/06/11 15338
9 Japan 126476461 2022/06/12 13381
10 Japan 126476461 2022/06/13 7942
# ℹ 15 more rows
pivot_wider():LongからWideへ# A tibble: 5 × 7
Country Population `2022/06/09` `2022/06/10` `2022/06/11` `2022/06/12`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 China 1447470092 819 848 1114 990
2 Japan 126476461 16788 15584 15338 13381
3 Korea 51269185 9304 8428 7382 3828
4 Mongolia 3278290 0 0 0 0
5 Taiwan 23816775 72846 68293 79616 50567
# ℹ 1 more variable: `2022/06/13` <dbl>
pivot_longer()とpivot_wider()
separate():列の分割COVID_LongのDate列をYear、Month、Dayに分けたい
Date列を"/"を基準に分割するseparate():列の分割# A tibble: 25 × 6
Country Population Year Month Day New_Cases
<chr> <dbl> <chr> <chr> <chr> <dbl>
1 China 1447470092 2022 06 09 819
2 China 1447470092 2022 06 10 848
3 China 1447470092 2022 06 11 1114
4 China 1447470092 2022 06 12 990
5 China 1447470092 2022 06 13 957
6 Japan 126476461 2022 06 09 16788
7 Japan 126476461 2022 06 10 15584
8 Japan 126476461 2022 06 11 15338
9 Japan 126476461 2022 06 12 13381
10 Japan 126476461 2022 06 13 7942
# ℹ 15 more rows
例) City_DataのCity列が「都道府県名+市区町村」
# A tibble: 4 × 2
City Pop
<chr> <dbl>
1 北海道音威子府村 693
2 大阪府高槻市 347424
3 広島県府中市 36471
4 鹿児島県指宿市 38207
正規表現(regular expression)の知識が必要
# A tibble: 4 × 3
Pref City Pop
<chr> <chr> <dbl>
1 北海道 音威子府村 693
2 大阪府 高槻市 347424
3 広島県 府中市 36471
4 鹿児島県 指宿市 38207
{tidyr}と{dplyr}を組み合わせることも可能
# A tibble: 5 × 2
Country New_Case_per_1M
<chr> <dbl>
1 China 0.653
2 Japan 109.
3 Korea 151.
4 Mongolia 64.4
5 Taiwan 2657.