・変数を手作りする方法を解説します
・変数をマージしてデータフレームの作り方を説明します
・複数のデータフレームをマージする方法を説明します
・様々な拡張子のデータを RStudio に取り込む方法を紹介します
・データ分析を行う前段階として、基礎的な専門用語の解説をします
テキストデータ、バイナリデータ、拡張子、パス、ファイル、フォルダ、Rプロジェクト、Rプロジェクトフォルダ、作業ディレクトリ、欠損値、変数の型、R付属データ、パイプ演算子、変数の型
(class
)、AND
演算子、OR
演算子、%in%
演算子、欠損値
{tidyverse}
をロードする{tidyverse}
には8つのパッケージが含まれているreadr
変数は「ベクトル」とも呼ばれる
R におけるデータの最小単位
同じデータ型が一つ以上格納されているオブジェクト
ベクトルを作る際に重要なこと
「ベクトル内の全ての要素は同じデータ型であること」
学生の id
ナンバーを入力し「id
」と名前を付ける
name
」と名前を付けるscore
」と名前を付けるtibble()
関数を使うために必要なパッケージをロードtibble()
関数は data.frame()
関数の拡張版data.frame()
関数とtibble()
関数は厳密には異なるデータ構造tibble()
で作成した表がより汎用性が高い# A tibble: 8 × 3
id name score
<dbl> <chr> <dbl>
1 1 鈴木 43
2 2 竹内 74
3 3 中山 80
4 4 藤江 37
5 5 政 20
6 6 大塚 83
7 7 大藤 64
8 8 北田 35
・注:tibble()
関数ではなくベースの
R
コマンド data.frame()
を使っても可能
id name score
1 1 鈴木 43
2 2 竹内 74
3 3 中山 80
4 4 藤江 37
5 5 政 20
6 6 大塚 83
7 7 大藤 64
8 8 北田 35
○tibble()
関数はデータフレームの大きさ(ここでは
8 x 3
)と変数のデータ型(ここでは <dbl>
と <chr>
)を表示してくれる
→ tibble()
関数を使う方が好ましい
○tibble()
関数は
{tidyverse}
パッケージに含まれている
gakka
) という新たな変数を追加するdf
) の後ろにドルマーク
$
を付けて変数名 (gakka
) を指定する# A tibble: 8 × 4
id name score gakka
<dbl> <chr> <dbl> <chr>
1 1 鈴木 43 法律政治
2 2 竹内 74 法律政治
3 3 中山 80 法律政治
4 4 藤江 37 法律政治
5 5 政 20 法律政治
6 6 大塚 83 経済
7 7 大藤 64 経済
8 8 北田 35 法律政治
df
に性別の変数 (gender
)
を追加する# A tibble: 8 × 5
id name score gakka gender
<dbl> <chr> <dbl> <chr> <chr>
1 1 鈴木 43 法律政治 男
2 2 竹内 74 法律政治 女
3 3 中山 80 法律政治 男
4 4 藤江 37 法律政治 女
5 5 政 20 法律政治 男
6 6 大塚 83 経済 女
7 7 大藤 64 経済 女
8 8 北田 35 法律政治 男
df2
を作るdf2
には次の2 つの変数が含ませるid
prefecture
学生の
id
番号を入力し「id
」と変数名を付ける
pref
」と変数名をつけるid
と pref
をデータフレームに組み込み「df2
」 と名前を付ける# A tibble: 8 × 2
id pref
<dbl> <chr>
1 1 北海道
2 2 福島県
3 3 宮古島
4 4 熊本県
5 5 奈良県
6 6 香川県
7 7 福井県
8 8 広島県
df1
と df2
に共通する変数である id
をよりどころに df1
と df2
をマージし、M
と名前を付ける id name score gakka gender pref
1 1 鈴木 43 法律政治 男 北海道
2 2 竹内 74 法律政治 女 福島県
3 3 中山 80 法律政治 男 宮古島
4 4 藤江 37 法律政治 女 熊本県
5 5 政 20 法律政治 男 奈良県
6 6 大塚 83 経済 女 香川県
7 7 大藤 64 経済 女 福井県
8 8 北田 35 法律政治 男 広島県
.html
.Rmd
.csv
.doc
.png
.jpg
など)がついているgetwd()
= get working directorygetwd()
とコマンドを実行してみるgetwd()
"/Users/asanomasahiko/Dropbox/statistics/class_materials/R"
Mac user
なら、このパスの始点は
C ドライブ
ではなくて Users
Windows User
なら、このパスの始点は
C ドライブ
になっているはず右端にある「R」の意味
私は今「R」という名前のRプロジェクトフォルダ(=
作業ディレクトリ) の中で仕事をしているよ
・「R」というのは、今、私がパソコンで作業している「Rプロジェクトフォルダ」の名前
・このフォルダは「Rプロジェクトフォルダ」
「作業ディレクトリ」とも呼ばれる
・setwd()
に適当なパスを入力することで、その都度、作業ディレクトリを設定できる
・しかし、いちいち作業ディレクトリを指定するより、Rプロジェクトを作成するのが効率的
その理由:
R プロジェクトを作成すると、分析に必要な .csv
ファイルを読み込んだり、グラフなどの分析結果を保存する時、いちいちパスを指定する必要がないから
2024
_grades」=> ○「grades_2024」data()
と入力→実行するとデータセット一覧が表示される(データの一部だけを表示)state.x77
の最初の 6
行を確認してみる Population Income Illiteracy Life Exp Murder HS Grad Frost Area
Alabama 3615 3624 2.1 69.05 15.1 41.3 20 50708
Alaska 365 6315 1.5 69.31 11.3 66.7 152 566432
Arizona 2212 4530 1.8 70.55 7.8 58.1 15 113417
Arkansas 2110 3378 1.9 70.66 10.1 39.9 65 51945
California 21198 5114 1.1 71.71 10.3 62.6 20 156361
Colorado 2541 4884 0.7 72.06 6.8 63.9 166 103766
state.x77
の終わりの 6 行を確認してみる Population Income Illiteracy Life Exp Murder HS Grad Frost Area
Vermont 472 3907 0.6 71.64 5.5 57.1 168 9267
Virginia 4981 4701 1.4 70.08 9.5 47.8 85 39780
Washington 3559 4864 0.6 71.72 4.3 63.5 32 66570
West Virginia 1799 3617 1.4 69.48 6.7 41.6 100 24070
Wisconsin 4589 4468 0.7 72.48 3.0 54.5 149 54464
Wyoming 376 4566 0.6 70.29 6.9 62.9 173 97203
Titanic
の客室別・性別・年齢別生存者数など興味深いデータがある, , Age = Child, Survived = No
Sex
Class Male Female
1st 0 0
2nd 0 0
3rd 35 17
Crew 0 0
, , Age = Adult, Survived = No
Sex
Class Male Female
1st 118 4
2nd 154 13
3rd 387 89
Crew 670 3
, , Age = Child, Survived = Yes
Sex
Class Male Female
1st 5 1
2nd 11 13
3rd 13 14
Crew 0 0
, , Age = Adult, Survived = Yes
Sex
Class Male Female
1st 57 140
2nd 14 80
3rd 75 76
Crew 192 20
データ形式ごとの読み取り
PCのデータには「テキストデータ」と「バイナリデータ」がある
データ形式は拡張子によって判断する
テキストデータ:
人間が理解できる文字列のデータ
.txt
ファイル・・・テキスト分析する時に使う
.tsv
ファイル・・・カンマの代わりに「タブ」で区切られている
.html
ファイル・・・ウェブスクレイピング(PC
がオンラインの情報を収集)をする際に使う
.csv
ファイル・・・comma-separated values
の略(カンマ区切り)
→ RStudio
ではこのファイル形式で読み取ることが多い
バイナリデータ:
PCは理解できるが人間は特定のソフトを使わないと理解できないデータ
.xls
ファイル・・・Excel で使われるファイル
.xlsx
ファイル・・・Excel
で使われるファイル(.xls
より新しい)
.dta
ファイル・・・統計ソフト Stata
で使われているデータ形式
.rds
ファイル・・・R 専用のデータ形式
MS Office Excel ではなく LibreOffice(無料のオフィスソフト)を使う
その理由:
→LibreOffice は無料
→文字エンコードを指定できる → 文字化けを回避できる
日本語を含むデータを使う場合、文字化けを起こす
→解決策:
UTF
-8あるいは CP932
に指定.csv
ファイルの読み込みdata
というフォルダを作成hr96-24.csv
ファイルを
data
の中に入れる.csv
ファイルの読み取りには {tidyverse}
の中に含まれる read_csv()
関数を使うread_csv()
関数を使わず R
のベースコマンドである read.csv()
を使って読み取ることもできるread_csv()
関数を使う方が圧倒的に早いhr96-24.csv
ファイルをエクセルか
Libre Office で開いてみることであるCSV UTF-8(コンマ区切り)(csv.)
」を選んでファイルを保存Shift-JIS
の csv ファイルUTF-8
の csv ファイルUTF-8
の csv
ファイルなので、Shift-JIS
から UTF-8
にエンコーディングを変更する必要があるCSV(コンマ区切り)(.csv)
」
を選ぶと、Shift-JIS
の csv ファイルで保存されてしまい R
で読み取ることができなくなるhr96-24.csv
が読み取れない場合には、日本語を読み取るエンコーディングを指定した次のコマンドを打ち込む文字化けへの対処 ・R
で文字化けが生じる原因は文字のロケール(locale
)の違い
・世界標準の UTF-8
を使用する
macOS
/Linux
・日本語表示に独自仕様を使用する Windows
・Windows
で作成されたデータを読み込む際に文字化けが生じる
・日本語 Windows
で作成されたデータの場合、ロケールが
Shift-JIS
である可能性が高い
・日本政府や自治体が作成・公開するデータの多くが
Shift-JIS
対処法:
・read_csv()
関数を使ってデータを読み取る際、次のコマンドのいずれかを追加する
locale = locale(encoding = "Shift_JIS")
locale = locale(encoding = "cp932")
・日本語 Windows
の場合、世界標準ロケールである
UTF-8
を正しく認識できない
対処法:
・read_csv()
関数を使ってデータを読み取る際、次のコマンドを追加する
locale = locale(encoding = "UTF-8")
*追記:
・2022年内にリリース予定のR 4.2では Windows版Rでも UTF-8
に対応予定
・その場合、Windows
で文字化けが生じる場合、上記「Mac(もしくは Linux)を使っている場合
」と同じ手順で対処する
.xls[x]
ファイルの読み込み注意:データを読みこんだだけで、即、計量分析ができる訳ではない
.csv
ファイルの読み取り方を説明しただけ.dta
ファイルの読み込み.dta
ファイルもバイナリデータ.dta
ファイルを読み込むために必要なパッケージをロード# A tibble: 6 × 19
statea stateb year dependa dependb demauta demautb allies dispute1 logdstab
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2 20 1920 0.0157 0.280 10 9 0 0 5.82
2 2 20 1921 0.0115 0.224 10 10 0 0 5.82
3 2 20 1922 0.0113 0.201 10 10 0 0 5.82
4 2 20 1923 0.0112 0.213 10 10 0 0 5.82
5 2 20 1924 0.0110 0.213 10 10 0 0 5.82
6 2 20 1925 0.0108 0.191 10 10 0 0 5.82
# ℹ 9 more variables: lcaprat2 <dbl>, smigoabi <dbl>, opena <dbl>, openb <dbl>,
# minrpwrs <dbl>, noncontg <dbl>, smldmat <dbl>, smldep <dbl>, dyadid <dbl>
[1] "statea" "stateb" "year" "dependa" "dependb" "demauta"
[7] "demautb" "allies" "dispute1" "logdstab" "lcaprat2" "smigoabi"
[13] "opena" "openb" "minrpwrs" "noncontg" "smldmat" "smldep"
[19] "dyadid"
.rds
ファイルの読み込みRds
と
Rda(RData)
があるread_rds()
で読み込めるwrite_rds()
で書き出せる{tidyverse}
{tidyverse}
とはデータサイエンスのために考案されたRパッケージの集合dplyr
、tidyr
、readr
、ggplot2
、magrittr
など数十パッケージで構成{tidyverse}
に属するパッケージは(tidy data
;
整然データ)を共有するmagrittr
パッケージではパイプ演算子
(%>%
) というとても便利な機能がある %>%
)%>%
)で繋ぐという点が特徴R 4.1
以降、R
内蔵演算子としてパイプ演算子(|>
)が追加%>%
でも
|>
でも、どちらを使っても結果はほとんど同じ%>%
と |>
の両方を使っている{tidyverse}
をインストールすることで導入可能%>%
もしくは |>
)
を使う理由formula型
)lm()
に渡すためには、lm()
内に data = .
と書く.
」の箇所にパイプ左側のオブジェクト (ここでは
df
) が入るという意味dplyr
dplyr
は {tidyverse}
パッケージ群のコア・パッケージの一つtibble
)を操作するパッケージdplyr
を使えば、行や列の抽出が簡単{tidyverse}
を読み込むと dplyr
は自動的に読み込まれるデータの準備 (hr96-24.csv
)
・hr96-24.csv
をクリックしてデータをパソコンにダウンロード
RProject
フォルダ内に data
という名称のフォルダを作成するhr96-24.csv
を手動でRProject
フォルダ内にある data
フォルダに入れるhr96_21.csv
は1996年に衆院選挙に小選挙区が導入されて以来実施された 9
回の衆議院選挙(1996, 2000, 2003, 2005, 2009, 2012, 2014, 2017, 2021,
2024)の結果のデータ# A tibble: 10,773 × 22
year pref ku kun wl rank nocand seito j_name gender name previous
<dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr> <chr> <dbl>
1 1996 愛知 aichi 1 1 1 7 新進 河村… male KAWA… 2
2 1996 愛知 aichi 1 0 2 7 自民 今枝… male IMAE… 2
3 1996 愛知 aichi 1 0 3 7 民主 佐藤… male SATO… 2
4 1996 愛知 aichi 1 0 4 7 共産 岩中… female IWAN… 0
5 1996 愛知 aichi 1 0 5 7 文化… 伊東… female ITO,… 0
6 1996 愛知 aichi 1 0 6 7 国民… 山田浩 male YAMA… 0
7 1996 愛知 aichi 1 0 7 7 無所 浅野… male ASAN… 0
8 1996 愛知 aichi 2 1 1 8 新進 青木… male AOKI… 2
9 1996 愛知 aichi 2 0 2 8 自民 田辺… male TANA… 0
10 1996 愛知 aichi 2 2 3 8 民主 古川… male FURU… 0
# ℹ 10,763 more rows
# ℹ 10 more variables: age <dbl>, exp <dbl>, status <dbl>, vote <dbl>,
# voteshare <dbl>, eligible <dbl>, turnout <dbl>, seshu_dummy <dbl>,
# jiban_seshu <chr>, nojiban_seshu <chr>
dim()
関数を使うと hr
は9,660行、22列のデータであることが分かる[1] 10773 22
df1
には 22 個の変数が入っている変数名 | 詳細 |
---|---|
year | 選挙年 (1996-2024) |
pref | 都道府県名 |
ku | 小選挙区名 |
kun | 小選挙区 |
rank | 当選順位 |
wl | 選挙の当落: 1 = 小選挙区当選、2 = 復活当選、0 = 落選 |
nocand | 立候補者数 |
seito | 候補者の所属政党 |
j_name | 候補者の氏名(日本語) |
name | 候補者の氏名(ローマ字) |
previous | これまでの当選回数(当該総選挙結果は含まない) |
gender | 立候補者の性別: “male”, “female” |
age | 立候補者の年齢 |
exp | 立候補者が使った選挙費用(総務省届け出) |
status | 候補者のステータス: 0 = 非現職、1 現職、2 = 元職 |
vote | 得票数 |
voteshare | 得票率 (%) |
eligible | 小選挙区の有権者数 |
turnout | 小選挙区の投票率 (%) |
seshu_dummy | 世襲候補者ダミー: 1 = 世襲、0 = 非世襲(地盤世襲 or 非世襲) |
jiban_seshu | 地盤の受け継ぎ元の政治家の氏名と関係 |
nojiban_seshu | 世襲元の政治家の氏名と関係 |
select()
(hr)
から特定の列(column
)を抽出する際は
select()
関数を使うselect()
関数の使い方:パイプを使わない場合
select(データ, 変数名1, 変数名2,...)
select()
関数の第一引数はデータフレームのオブジェクト名(この場合は「データ」が該当)select()
関数の使い方:
パイプを使う場合
データ %>% select(変数名1, 変数名2,...)
hr
に含まれる 22 の変数名を表示させる [1] "year" "pref" "ku" "kun"
[5] "wl" "rank" "nocand" "seito"
[9] "j_name" "gender" "name" "previous"
[13] "age" "exp" "status" "vote"
[17] "voteshare" "eligible" "turnout" "seshu_dummy"
[21] "jiban_seshu" "nojiban_seshu"
(hr)
から year
,
ku
, kun
, seito
,
j_name
列だけを抜き出す# A tibble: 10,773 × 5
year ku kun seito j_name
<dbl> <chr> <dbl> <chr> <chr>
1 1996 aichi 1 新進 河村たかし
2 1996 aichi 1 自民 今枝敬雄
3 1996 aichi 1 民主 佐藤泰介
4 1996 aichi 1 共産 岩中美保子
5 1996 aichi 1 文化フォーラム 伊東マサコ
6 1996 aichi 1 国民党 山田浩
7 1996 aichi 1 無所 浅野光雪
8 1996 aichi 2 新進 青木宏之
9 1996 aichi 2 自民 田辺広雄
10 1996 aichi 2 民主 古川元久
# ℹ 10,763 more rows
:
」を使って抜き出すことができる# A tibble: 10,773 × 9
year pref ku kun wl rank nocand seito j_name
<dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 1996 愛知 aichi 1 1 1 7 新進 河村たかし
2 1996 愛知 aichi 1 0 2 7 自民 今枝敬雄
3 1996 愛知 aichi 1 0 3 7 民主 佐藤泰介
4 1996 愛知 aichi 1 0 4 7 共産 岩中美保子
5 1996 愛知 aichi 1 0 5 7 文化フォーラム 伊東マサコ
6 1996 愛知 aichi 1 0 6 7 国民党 山田浩
7 1996 愛知 aichi 1 0 7 7 無所 浅野光雪
8 1996 愛知 aichi 2 1 1 8 新進 青木宏之
9 1996 愛知 aichi 2 0 2 8 自民 田辺広雄
10 1996 愛知 aichi 2 2 3 8 民主 古川元久
# ℹ 10,763 more rows
データの抜き出しで注意すべき点
・ここでは hr
から変数を抽出し一時的に出力しただけ
・試しに hr
に含まれる変数をチェックしてみる
[1] "year" "pref" "ku" "kun"
[5] "wl" "rank" "nocand" "seito"
[9] "j_name" "gender" "name" "previous"
[13] "age" "exp" "status" "vote"
[17] "voteshare" "eligible" "turnout" "seshu_dummy"
[21] "jiban_seshu" "nojiban_seshu"
・9 つの変数が抜き出されていない
・抽出したデータを引き続き使うためには、代入演算子(<-
)を使って、抽出した結果を別途のオブジェクトとして新たに名前を付けて格納(=保存)する必要がある
・hr
から 9 つの変数を抽出したものを hr1
という名で作業環境内に格納するためには以下のように入力する
[1] "year" "pref" "ku" "kun" "wl" "rank" "nocand" "seito"
[9] "j_name"
・9 つの変数だけが抜き出されていて、hr1
は抽出したデータとして引き続き使うことができる
select()
関数のもう一つの特徴は、変数名の「変更」と「抽出」を同時に行えることj_name
の変数名を namae
に変更したい場合は以下のように入力する# A tibble: 10,773 × 6
year ku kun seito namae vote
<dbl> <chr> <dbl> <chr> <chr> <dbl>
1 1996 aichi 1 新進 河村たかし 66876
2 1996 aichi 1 自民 今枝敬雄 42969
3 1996 aichi 1 民主 佐藤泰介 33503
4 1996 aichi 1 共産 岩中美保子 22209
5 1996 aichi 1 文化フォーラム 伊東マサコ 616
6 1996 aichi 1 国民党 山田浩 566
7 1996 aichi 1 無所 浅野光雪 312
8 1996 aichi 2 新進 青木宏之 56101
9 1996 aichi 2 自民 田辺広雄 44938
10 1996 aichi 2 民主 古川元久 43804
# ℹ 10,763 more rows
rename()
関数を使うselect()
関数と同じhr
の ku
を senkyoku
に、seito
を party
に変更する場合は次のように入力する# A tibble: 10,773 × 22
year pref senkyoku kun wl rank nocand party j_name gender name
<dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr> <chr>
1 1996 愛知 aichi 1 1 1 7 新進 河村… male KAWA…
2 1996 愛知 aichi 1 0 2 7 自民 今枝… male IMAE…
3 1996 愛知 aichi 1 0 3 7 民主 佐藤… male SATO…
4 1996 愛知 aichi 1 0 4 7 共産 岩中… female IWAN…
5 1996 愛知 aichi 1 0 5 7 文化フォー… 伊東… female ITO,…
6 1996 愛知 aichi 1 0 6 7 国民党 山田浩 male YAMA…
7 1996 愛知 aichi 1 0 7 7 無所 浅野… male ASAN…
8 1996 愛知 aichi 2 1 1 8 新進 青木… male AOKI…
9 1996 愛知 aichi 2 0 2 8 自民 田辺… male TANA…
10 1996 愛知 aichi 2 2 3 8 民主 古川… male FURU…
# ℹ 10,763 more rows
# ℹ 11 more variables: previous <dbl>, age <dbl>, exp <dbl>, status <dbl>,
# vote <dbl>, voteshare <dbl>, eligible <dbl>, turnout <dbl>,
# seshu_dummy <dbl>, jiban_seshu <chr>, nojiban_seshu <chr>
select()
内に20の変数名を入れれば良いselect()
関数は変数名の前に「!
」
(推奨)、または「-
」を付けることで、特定の列を除外することができるhr
から year
と pref
列だけを除外したければ次のように入力する# A tibble: 10,773 × 20
ku kun wl rank nocand seito j_name gender name previous age
<chr> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr> <chr> <dbl> <dbl>
1 aichi 1 1 1 7 新進 河村… male KAWA… 2 47
2 aichi 1 0 2 7 自民 今枝… male IMAE… 2 72
3 aichi 1 0 3 7 民主 佐藤… male SATO… 2 53
4 aichi 1 0 4 7 共産 岩中… female IWAN… 0 43
5 aichi 1 0 5 7 文化フォー… 伊東… female ITO,… 0 51
6 aichi 1 0 6 7 国民党 山田浩 male YAMA… 0 51
7 aichi 1 0 7 7 無所 浅野… male ASAN… 0 45
8 aichi 2 1 1 8 新進 青木… male AOKI… 2 51
9 aichi 2 0 2 8 自民 田辺… male TANA… 0 71
10 aichi 2 2 3 8 民主 古川… male FURU… 0 30
# ℹ 10,763 more rows
# ℹ 9 more variables: exp <dbl>, status <dbl>, vote <dbl>, voteshare <dbl>,
# eligible <dbl>, turnout <dbl>, seshu_dummy <dbl>, jiban_seshu <chr>,
# nojiban_seshu <chr>
c()
」や、「:
」を使ってまとめて選ばないことができるyear
から nocand
までの 7
つの変数は連続しているので、これらをまとめて選ばないことができる# A tibble: 10,773 × 15
seito j_name gender name previous age exp status vote voteshare
<chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 新進 河村… male KAWA… 2 47 9.83e6 1 66876 40
2 自民 今枝… male IMAE… 2 72 9.31e6 2 42969 25.7
3 民主 佐藤… male SATO… 2 53 9.23e6 1 33503 20.1
4 共産 岩中… female IWAN… 0 43 2.18e6 0 22209 13.3
5 文化フォー… 伊東… female ITO,… 0 51 NA 0 616 0.4
6 国民党 山田浩 male YAMA… 0 51 NA 0 566 0.3
7 無所 浅野… male ASAN… 0 45 NA 0 312 0.2
8 新進 青木… male AOKI… 2 51 1.29e7 1 56101 32.9
9 自民 田辺… male TANA… 0 71 1.65e7 2 44938 26.4
10 民主 古川… male FURU… 0 30 1.14e7 0 43804 25.7
# ℹ 10,763 more rows
# ℹ 5 more variables: eligible <dbl>, turnout <dbl>, seshu_dummy <dbl>,
# jiban_seshu <chr>, nojiban_seshu <chr>
starts_with()
[1] "year" "pref" "ku" "kun"
[5] "wl" "rank" "nocand" "seito"
[9] "j_name" "gender" "name" "previous"
[13] "age" "exp" "status" "vote"
[17] "voteshare" "eligible" "turnout" "seshu_dummy"
[21] "jiban_seshu" "nojiban_seshu"
hr
から seshu
で終わる列を抽出する場合は# A tibble: 10,773 × 3
j_name jiban_seshu nojiban_seshu
<chr> <chr> <chr>
1 河村たかし <NA> <NA>
2 今枝敬雄 <NA> <NA>
3 佐藤泰介 <NA> <NA>
4 岩中美保子 <NA> <NA>
5 伊東マサコ <NA> <NA>
6 山田浩 <NA> <NA>
7 浅野光雪 <NA> <NA>
8 青木宏之 <NA> <NA>
9 田辺広雄 伯父=加藤鐐五郎(衆議院議員) <NA>
10 古川元久 <NA> <NA>
# ℹ 10,763 more rows
ends_with()
hr
から ku
で始まる列を抽出する場合は# A tibble: 10,773 × 3
j_name ku kun
<chr> <chr> <dbl>
1 河村たかし aichi 1
2 今枝敬雄 aichi 1
3 佐藤泰介 aichi 1
4 岩中美保子 aichi 1
5 伊東マサコ aichi 1
6 山田浩 aichi 1
7 浅野光雪 aichi 1
8 青木宏之 aichi 2
9 田辺広雄 aichi 2
10 古川元久 aichi 2
# ℹ 10,763 more rows
select()
関数は書かれた順番で列を抽出する [1] "year" "pref" "ku" "kun"
[5] "wl" "rank" "nocand" "seito"
[9] "j_name" "gender" "name" "previous"
[13] "age" "exp" "status" "vote"
[17] "voteshare" "eligible" "turnout" "seshu_dummy"
[21] "jiban_seshu" "nojiban_seshu"
pref
)から 10
番目(gender
)の一群と 11 番目(name
)から 21
番目(nojiban_seshu
)の一群を入れ替えたければ次のように入力する [1] "year" "name" "previous" "age"
[5] "exp" "status" "vote" "voteshare"
[9] "eligible" "turnout" "seshu_dummy" "jiban_seshu"
[13] "nojiban_seshu" "pref" "ku" "kun"
[17] "wl" "rank" "nocand" "seito"
[21] "j_name" "gender"
relocate()
relocate()
関数も使えるrelocate()
関数の使い方
特定の変数の後ろへ移動
データ %>% relocate(移動したい変数名, .after = 変更先)
特定の変数の前へ移動
データ %>% relocate(移動したい変数名, .before = 変更先)
name
から nojiban_seshu
の一群を、year
の後ろに移動させたいのだから [1] "year" "name" "previous" "age"
[5] "exp" "status" "vote" "voteshare"
[9] "eligible" "turnout" "seshu_dummy" "jiban_seshu"
[13] "nojiban_seshu" "pref" "ku" "kun"
[17] "wl" "rank" "nocand" "seito"
[21] "j_name" "gender"
select()
関数を使うfilter()
関数を使うfilter()
関数の使い方
データ %>% filter(条件1, 条件2,...)
filter()
関数を使うためには論理演算子(==、>、&
など)の理解が必要
データ (hr) を使って演習してみる
[1] "year" "pref" "ku" "kun"
[5] "wl" "rank" "nocand" "seito"
[9] "j_name" "gender" "name" "previous"
[13] "age" "exp" "status" "vote"
[17] "voteshare" "eligible" "turnout" "seshu_dummy"
[21] "jiban_seshu" "nojiban_seshu"
unique()
関数を使って year
の値を確認する [1] 1996 2000 2003 2005 2009 2012 2014 2017 2021 2024
# A tibble: 1,113 × 22
year pref ku kun wl rank nocand seito j_name gender name previous
<dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr> <chr> <dbl>
1 2024 愛知 aichi 1 1 1 4 諸派 河村… male KAWA… 5
2 2024 愛知 aichi 1 0 2 4 立憲 吉田… male YOSH… 3
3 2024 愛知 aichi 1 0 3 4 自民 熊田… male KUMA… 4
4 2024 愛知 aichi 1 0 4 4 維新 山本… male YAMA… 0
5 2024 愛知 aichi 2 1 1 4 国民 古川… male FURU… 9
6 2024 愛知 aichi 2 0 2 4 自民 中川… male NAKA… 1
7 2024 愛知 aichi 2 0 3 4 維新 室園… male MURO… 0
8 2024 愛知 aichi 2 0 4 4 共産 酒井… male SAKA… 0
9 2024 愛知 aichi 3 1 1 5 立憲 近藤… male KOND… 9
10 2024 愛知 aichi 3 0 2 5 自民 水野… male MIZU… 0
# ℹ 1,103 more rows
# ℹ 10 more variables: age <dbl>, exp <dbl>, status <dbl>, vote <dbl>,
# voteshare <dbl>, eligible <dbl>, turnout <dbl>, seshu_dummy <dbl>,
# jiban_seshu <chr>, nojiban_seshu <chr>
さらに次の二つの条件を付け加えるとする:
・自民党候補者だけ (seito == "自民"
)
・2 番目 (pref
) から 19 番目 (turnout
)
までの変数だけを取り出す
filter()
関数と
select()
関数を組み合わせて入力する
取り出した変数には hr2024
というふうにわかりやすい名前を付けるとよい
hr
に含まれる seito
の値をチェックする
[1] "新進" "自民" "民主"
[4] "共産" "文化フォーラム" "国民党"
[7] "無所" "自由連合" "政事公団太平会"
[10] "社民" "新社会" "日本新進"
[13] "新党さきがけ" "青年自由" "さわやか神戸・市民の会"
[16] "民主改革連合" "市民新党にいがた" "沖縄社会大衆党"
[19] "緑の党" "公明" "諸派"
[22] "保守" "無所属の会" "自由"
[25] "改革クラブ" "保守新" "新党尊命"
[28] "ニューディールの会" "世界経済共同体党" "新党日本"
[31] "国民新党" "新党大地" "幸福"
[34] "みんな" "改革" "日本未来"
[37] "日本維新の会" "当たり前" "アイヌ民族党"
[40] "政治団体代表" "安楽死党" "次世"
[43] "維新" "生活" "立憲"
[46] "希望" "緒派" ""
[49] "N党" "国民" "れい"
[52] "参政"
filter()
関数を使う際の注意点
select()
関数と filter()
関数を一緒に使う時の順番に注意・例えば、次のように入力すると・・・
次のようなエラーがでる
Error in filter()
:
! Problem while computing
..1 = year == 2024
.
Caused by error:
! object year
not found
つまり「year
という変数がみつからない!」という意味
year
が見つからないのは当然
→ 2 行目の select(pref:turnout)
で year
を除外しているから
class
(型)に注意double
, numeric
,
integer
)なら数値を入力character
)なら ""
で値を囲むfilter(year == 2024)
・・・変数が数値型の場合
filter(seito == "自民")
・・・変数が文字型の場合
&
)もしくは(,
)を使うhr
から次の条件を同時に満たす行を抽出してみるyear == 2009
)gender == "female"
)hr %>%
filter(year == 2024 & gender == "female") %>%
select(pref, kun, seito, j_name, gender, rank, wl) # 表示する変数を 7 つだけ選択
# A tibble: 243 × 7
pref kun seito j_name gender rank wl
<chr> <dbl> <chr> <chr> <chr> <dbl> <dbl>
1 愛知 3 参政 杉本純子 female 5 0
2 愛知 4 維新 中田千代 female 3 0
3 愛知 4 諸派 麻生知沙 female 4 0
4 愛知 5 維新 岬麻紀 female 3 0
5 愛知 7 国民 日野紗里亜 female 1 1
6 愛知 9 共産 伊藤恵子 female 3 0
7 愛知 11 国民 丹野みどり female 1 1
8 愛知 14 立憲 大嶽理恵 female 2 2
9 愛知 15 立憲 小山千帆 female 3 2
10 秋田 3 立憲 小川幾代 female 3 0
# ℹ 233 more rows
|
)を使うhr
から
2024年総選挙だけのデータを取り出しseito == "立憲"
)seito == "社民"
)hr %>%
filter(year == 2024) %>% # 2024年総選挙だけのデータを取り出す
filter(seito == "立憲" | seito == "社民") %>% # 立憲もしくは社民の候補者
select(pref, kun, seito, j_name, gender, rank, wl) # 表示する変数を 7 つだけ選択
# A tibble: 217 × 7
pref kun seito j_name gender rank wl
<chr> <dbl> <chr> <chr> <chr> <dbl> <dbl>
1 愛知 1 立憲 吉田統彦 male 2 0
2 愛知 3 立憲 近藤昭一 male 1 1
3 愛知 4 立憲 牧義夫 male 1 1
4 愛知 5 立憲 西川厚志 male 1 1
5 愛知 6 社民 大西雅人 male 3 0
6 愛知 8 立憲 伴野豊 male 1 1
7 愛知 9 立憲 岡本充功 male 1 1
8 愛知 10 立憲 藤原規真 male 1 1
9 愛知 12 立憲 重徳和彦 male 1 1
10 愛知 13 立憲 大西健介 male 1 1
# ℹ 207 more rows
OR 演算子
と AND 演算子
の組み合わせ hr
から
2024年総選挙だけのデータを取り出しseito == "立憲"
)seito == "社民"
)wl == 1
)hr %>%
filter(year == 2024) %>% # 2024年総選挙だけのデータを取り出す
filter(seito == "立憲" | seito == "社民") %>%
filter(wl == 1) %>%
select(pref, kun, seito, j_name, gender, rank, wl) # 表示する変数を 7 つだけ選
# A tibble: 105 × 7
pref kun seito j_name gender rank wl
<chr> <dbl> <chr> <chr> <chr> <dbl> <dbl>
1 愛知 3 立憲 近藤昭一 male 1 1
2 愛知 4 立憲 牧義夫 male 1 1
3 愛知 5 立憲 西川厚志 male 1 1
4 愛知 8 立憲 伴野豊 male 1 1
5 愛知 9 立憲 岡本充功 male 1 1
6 愛知 10 立憲 藤原規真 male 1 1
7 愛知 12 立憲 重徳和彦 male 1 1
8 愛知 13 立憲 大西健介 male 1 1
9 秋田 2 立憲 緑川貴士 male 1 1
10 青森 3 立憲 岡田華子 female 1 1
# ℹ 95 more rows
%in%
演算子OR 演算子
と
AND 演算子
の組み合わせコードを%in%
演算子を使ってさらに効率化できるhr %>%
filter(year == 2024) %>% # 2024年総選挙だけのデータを取り出す
filter(seito %in% c("立憲","社民"), wl == 1) %>%
select(pref, kun, seito, j_name, gender, rank, wl) # 表示する変数を 7 つだけ選
# A tibble: 105 × 7
pref kun seito j_name gender rank wl
<chr> <dbl> <chr> <chr> <chr> <dbl> <dbl>
1 愛知 3 立憲 近藤昭一 male 1 1
2 愛知 4 立憲 牧義夫 male 1 1
3 愛知 5 立憲 西川厚志 male 1 1
4 愛知 8 立憲 伴野豊 male 1 1
5 愛知 9 立憲 岡本充功 male 1 1
6 愛知 10 立憲 藤原規真 male 1 1
7 愛知 12 立憲 重徳和彦 male 1 1
8 愛知 13 立憲 大西健介 male 1 1
9 秋田 2 立憲 緑川貴士 male 1 1
10 青森 3 立憲 岡田華子 female 1 1
# ℹ 95 more rows
NA
と表記するexp
)
には欠損値が含まれているmean()
関数はそのまま使えない[1] NA
drop_na()
# A tibble: 9,479 × 3
year j_name exp
<dbl> <chr> <dbl>
1 1996 河村たかし 9828097
2 1996 今枝敬雄 9311555
3 1996 佐藤泰介 9231284
4 1996 岩中美保子 2177203
5 1996 青木宏之 12940178
6 1996 田辺広雄 16512426
7 1996 古川元久 11435567
8 1996 石山淳一 2128510
9 1996 藤原美智子 3270533
10 1996 吉田幸弘 11245219
# ℹ 9,469 more rows
欠損値を drop
した exp
6829
行を抽出できた
exp
の平均値を確認する
[1] 7125574
・Q7.1:
「1.4 データフレームのマージ」
を参考にして、次の問題にこたえなさい
Q1:
次の変数を含む、皆さんの家族親族(友人でも可)のデータフレーム
(df1
) を作りなさい(5人程度)
① id
: 通し番号 (1…..5)
② name
:
拓也、恵子、美智子等々、家族親族(友人)の名前
③ age
: 年齢
④ relationship
:
あなたとの関係(父、母、兄、姉、弟、妹、友人等々)
Q2:
次の変数を含む、皆さんの家族親族分(友人でも可)のデータフレーム
(df2
) を作りなさい(5人程度)
① id: 通し番号 (1…..5)
② gender: 性別
③ height: 身長
Q3: df1
と df2
に共通する変数である id をよりどころに df1
と
df2
をマージして M1
を作り、表示しなさい
Q4: 作成したデータフレーム M1
に
family.csv
と名前を付け DT::datatable()
関数を使って表示しなさい
・Q7.2:
「5.2 行の抽出」
を参考にして、次の問題にこたえなさい
分析には衆議院選挙データセット hr96-24.csv を使うこと
Q1:
2005年総選挙に出馬して小選挙区で当選した女性の民主党候補者だけを取り出し、DT::datatable()
関数を使ってデータを見やすく表示しなさい
Q2:
2009年総選挙に出馬して小選挙区で当選した女性の自民党候補者だけを取り出し、DT::datatable()
関数を使ってデータを見やすく表示しなさい