・変数を手作りする方法を解説します
・変数をマージしてデータフレームの作り方を説明します
・複数のデータフレームをマージする方法を説明します
・様々な拡張子のデータを RStudio に取り込む方法を紹介します
- データ分析を行う前段階として、基礎的な専門用語の解説をします
tidyverse
) をロードするtidyverse
には8つのパッケージが含まれているreadr
name
」と名前を付けるscore
」と名前を付けるname
と score
をデータフレームに組み入れ「df1
」と名前を付ける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
には次の二つの変数が含ませる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 directrygetwd()
とコマンドを実行してみるgetwd()
"/Users/asanomasahiko/Dropbox/statistics/class_materials/R"
Mac
を使っているので、このパスの始点は
C ドライブ
ではなくて Users
Windows User
なら、このパスの始点は
C ドライブ
になっているはずsetwd()
に適当なパスを入力することで、その都度、作業ディレクトリを設定できる・しかし、いちいち作業ディレクトリを指定するより、Rプロジェクトを作成するのが効率的
R プロジェクトを作成すると、分析に必要な .csv
ファイルを読み込んだり、グラフなどの分析結果を保存する時、いちいちパスを指定する必要がないから
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
MS Office Excel ではなく LibreOffice(無料のオフィスソフト)を使う
→LibreOffice は無料
→文字エンコードを指定できる→文字化けを回避できる
日本語を含むデータを使う場合、文字化けを起こす
LibreOffice でファイルを開く際にエンコードを
UTF
-8あるいは CP932
に指定
CSVファイルには文字コード情報が含まれていない
CSV形式は非常にシンプルなテキストファイルなので、ファイル内に「この文字コードで書かれています」という情報が含まれていない
→ 読み取る側(ExcelやLibreOfficeなど)が独自に推測する必要あり
日本語環境のExcelはデフォルトで Shift_JIS(CP932)
を使ってCSVを開く
しかし、csvファイルが UTF-8
で保存されていた場合、Excelでは「文字化け」が発生する
LibreOfficeは csv
を開くときに「テキストインポート」ダイアログが表示され、文字コードを選べる
→ デフォルトでUTF-8を選んでくれることが多い
→ ファイルの実際のエンコーディングに合った方法で読み込める
→ 文字化けしない
MS Office Excel ではなく LibreOffice(無料のオフィスソフト)を使う その理由: →LibreOffice は無料 →文字エンコードを指定できる → 文字化けを回避できる
日本語を含むデータを使う場合、文字化けを起こす
→解決策:
LibreOffice でファイルを開く際にエンコードを UTF-8あるいは CP932 に指定
hr96-24.csv
をダウンロードして読み込んでみるdata
というフォルダを作成hr96-24.csv
ファイルを
data
の中に入れる.csv
ファイルの読み取りには {tidyverse
}
の中に含まれる read_csv()
関数を使うread_csv()
関数を使わず R
のベースコマンドである read.csv()
を使って読み取ることもできるread_csv()
関数を使う方が圧倒的に早い→ 「LibreOffice.app」を選ぶ
→ 「OK」を選ぶ
文字化けへの対処
・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)を使っている場合 」と同じ手順で対処する
注意:データを読みこんだだけで、即、計量分析ができる訳ではない
# 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"
data
フォルダに triangle.csv
というファイルが作成されていることを確認することデータの準備 (hr96-24.csv)
・hr96-24.csv をクリックしてデータをパソコンにダウンロード
・RProject フォルダ内に data という名称のフォルダを作成する
・ダウンロードした hr96-24.csv を手動でRProject フォルダ内にある data
フォルダに入れる
・選挙データの読み取る
# 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>
[1] 10773 22
df1
には 22 個の変数が入っている変数名 | 詳細 |
---|---|
year | 選挙年 (1996-2017) |
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()
関数の使い方:パイプを使わない場合
select(データ, 変数名1, 変数名1,...)
select()
関数の使い方:パイプを使う場合
データ %>% select(変数名1, 変数名2,...)
[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"
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"
year
, ku
,
kun
, seito
, j_name
,
vote
を抽出し、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()
関数を使う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の変数名を入れれば良い
しかしこれは非効率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"
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>
・hr
に含まれる seito
の値をチェックする
[1] "新進" "自民" "民主"
[4] "共産" "文化フォーラム" "国民党"
[7] "無所" "自由連合" "政事公団太平会"
[10] "社民" "新社会" "日本新進"
[13] "新党さきがけ" "青年自由" "さわやか神戸・市民の会"
[16] "民主改革連合" "市民新党にいがた" "沖縄社会大衆党"
[19] "緑の党" "公明" "諸派"
[22] "保守" "無所属の会" "自由"
[25] "改革クラブ" "保守新" "新党尊命"
[28] "ニューディールの会" "世界経済共同体党" "新党日本"
[31] "国民新党" "新党大地" "幸福"
[34] "みんな" "改革" "日本未来"
[37] "日本維新の会" "当たり前" "アイヌ民族党"
[40] "政治団体代表" "安楽死党" "次世"
[43] "維新" "生活" "立憲"
[46] "希望" "緒派" "N党"
[49] "国民" "れい" "参政"
・自民党候補者だけ (seito == "自民"
)
・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"
・2 番目 (pref
) から 19 番目 (turnout
)
までの変数だけを取り出す
・filter()
関数と
select()
関数を組み合わせて入力する
・取り出した変数には hr2024
というふうにわかりやすい名前を付けるとよい
pref
) から 19 番目 (turnout
)
までの変数だけを取り出すDT
パッケージを使って見やすく表示できる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
を除外しているから
・指定する変数が数値型 (double
, numeric
,
integer
)なら数値を入力
・指定する変数が文字型 (character
)なら “” で値を囲む
filter(year == 2024)・・・変数が数値型の場合
filter(seito == "自民")・・・変数が文字型の場合
year == 2009
)gender == "female"
)hr %>%
filter(year == 2024 & gender == "female") %>%
select(pref, kun, seito, j_name, gender, rank, wl) # 表示する変数を 7 つだけ選択
# A tibble: 244 × 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
# ℹ 234 more rows
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
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
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
mean()
関数はそのまま使えない[1] NA
drop_na()
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() 関数を使って表示しなさい
分析には衆議院選挙データセット hr96-24.csv
を使うこと
使う変数は次の 6 つに限ること
Q1:
2005年総選挙に出馬して小選挙区で当選した女性の民主党候補者だけを取り出し、DT::datatable()
関数を使ってデータを見やすく表示しなさい
Q2:
2009年総選挙に出馬して小選挙区で当選した女性の自民党候補者だけを取り出し、DT::datatable()
関数を使ってデータを見やすく表示しなさい