3  データの読み込み

データの読み込みを行う際にreadrhavenパッケージを用いる. readrパッケージのかわりにtidyverseパッケージを呼び出してもよい.

# パッケージの呼び出し
pacman::p_load(
  here,
  dplyr,  # データ操作のための関数
  readr,   # csvファイルを読み込む.tidyverseとしてもよい.
  haven   # sav, dta, sasファイルなどを読み込む.
  )

3.1 使用するデータ

東京大学社会科学研究所附属社会調査・データアーカイブ研究センター(the Center for Social Research and Data Archives: CSRDA)で公開されている「東大社研・若年パネル調査(JLPS-Y)wave1,2007(非制限公開疑似データ)」(調査番号:u001,寄託者:東京大学社会科学研究所パネル調査プロジェクト)を用いる.

https://csrda.iss.u-tokyo.ac.jp/infrastructure/urd/

3.2 データの保存先

  • R4SS:作業ディレクトリ
    • data:データを保存するフォルダ
      • processed:加工したデータを保存するフォルダ
      • raw:加工前の生データを保存するフォルダ
        • u001_readme.docx
        • u001.csv:csv形式のデータ
        • u001.dta:dta形式のデータ(Stata)
        • u001.sav:sav形式のデータ(SPSS)
        • u001c.pdf:調査票
    • scripts:Rスクリプトを保存するフォルダ

MACの画面だと Figure 3.1 のようになる.Rの基礎でhere()関数とdir_create()関数を組み合わせて作成している.ここのrawというフォルダにu001.zipを展開した中身を保存する.u001というフォルダは使用しない(使用してもよいがファイルの場所を間違えないようにすること.本資料では,rawのすぐ下にデータがあるように設定している).

図 3.1: RStudioの画面

3.3 Import Datasetからデータを読み込む

hereをつかったり,ファイルのパスを書くことに慣れないうちは,自分でファイルを探して指定する方法が確実かもしれない. まずcsvの場合は,「File」\(\rightarrow\)「Import Dataset」\(\rightarrow\)「From text (base)…」か「File」\(\rightarrow\)「Import Dataset」\(\rightarrow\)「From text (readr)…」を使用する.

3.3.1 From text (base)…の場合

u001.csvを指定し「Open」を選択すると, Figure 3.2 のような画面が現れる.「Heading」は「Yes」とする.

図 3.2: From text (base)…の場合

右下の「Data Frame」に正しくデータが表示されているようであれば,「Import」を選択する. するとデータがソース画面に表示される.うまく読み込まれていそうであればデータは閉じてしまおう. コンソールには読み込みに用いたコードが残されているので,これをコピーしておこう.

u001 <- read.csv("~/GitHub/R4SS/data/raw/u001.csv")

3.3.2 From text (readr)…の場合

右端の「Browse」からu001.csvを指定し「Open」を選択すると, Figure 3.3 のような画面が現れる.

図 3.3: From text (readr)…の場合

そのまま「Import」を選択すればよい.ここでもデータがソースの別のタブで開かれるが,不要なので確認したら閉じてしまおう.コンソールには次のプログラムが残っているので,スクリプトにコピーしておこう.

library(readr)
u001 <- read_csv("data/raw/u001.csv")
Rows: 1000 Columns: 72
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
dbl (72): caseid, sex, ybirth, mbirth, ZQ03, JC_1, JC_41, ZQ08A, ZQ08B, ZQ08...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

なおデフォルトではデータを代入するオブジェクトの名前はu001となっているが,コピーしたらdなど適当な分かりやすい名前に変更するとよい.

3.4 csvの場合

では直接パスを書き,データを読み込んでみる.もともとRに備わっているread.csvを使う方法とreadrread_csvの2つの方法がある. tibble形式で読み込まれるread_csvを使用することを個人的には勧めたい.

3.4.1 read.csv

# read.csvでcsvデータを読み込む
d_csv_1 <- read.csv("data/raw/u001.csv")
# 確認
head(d_csv_1)
  caseid sex ybirth mbirth ZQ03 JC_1 JC_41 ZQ08A ZQ08B ZQ08C ZQ08D ZQ08E ZQ08F
1  10001   1   1976     10    1    2    12     4     1     3     4     4     4
2  10002   1   1972      1    1    2     9     6     2     2     4     6     6
3  10003   1   1975      4    1    2     9     6     6     6     3     6     6
4  10004   2   1974     11    1    2     7     6     1     1     5     1     1
5  10005   1   1978      1    2   10    88     6     2     2     4     1     2
6  10006   1   1984      2    2   10    88     6     1     2     6     3     6
  ZQ08G ZQ08H ZQ11_A ZQ11_B ZQ11_C ZQ11_D ZQ11_E ZQ11_F ZQ11_G ZQ11_H ZQ11_I
1     5     3      2      2      2      2      2      2      2      2      2
2     6     5      2      2      2      2      2      1      2      2      2
3     4     6      2      2      2      2      1      1      1      2      2
4     4     2      2      2      2      2      2      2      2      2      2
5     5     1      2      2      2      2      1      2      2      2      2
6     6     6      2      2      2      2      2      2      2      2      2
  ZQ11_J ZQ11_K ZQ11_L ZQ11_M ZQ11_N ZQ11_O ZQ12 ZQ14_1A ZQ14_1B ZQ14_1C
1      2      2      2      2      2      2    2       0       0       1
2      2      2      2      2      2      2    2       0       0       0
3      2      2      2      2      2      2    4       0       0       0
4      2      2      2      2      2      2    3       1       1       0
5      1      2      1      2      2      2    4       2       0       0
6      1      2      2      2      1      2    2       0       0       1
  ZQ14_1D ZQ23A ZQ23B ZQ23C ZQ23D ZQ24 ZQ25 ZQ26A ZQ26B ZQ26C ZQ26D ZQ26E ZQ26F
1       0     5     5     5     4    1    1     4     5     3     5     3     4
2       1     3     5     2     2    1    3     5     5     2     5     1     5
3       0     3     2     2     2    1    3     5     5     4     5     3     5
4       0     3     5     2     2    1    2     3     5     2     4     2     4
5       0     5     8     5     5    1    2     3     3     4     3     3     4
6       0     4     8     3     2    1    4     3     4     3     4     3     5
  ZQ30D ZQ35 ZQ39A ZQ42 ZQ43 ZQ47A ZQ47B ZQ47C ZQ50 ZQ52A ZQ52Y ZQ54A ZQ54B
1     2    4     4    9    2     6     5     8    2     2    51     1     2
2     1    5     3    1    1     9     5    10    2     2    51     1     2
3     1    4     5    9    4     6     3     6    2     2    56     3     5
4     2    5     3    3    3     6     8     9    2     2    48     6     1
5     4    5     4    2    2     1    99    99    1     8   888     8     8
6     4    7     4    2    3     2    15    10    1     8   888     8     8
  ZQ54C ZQ54D ZQ61_A ZQ61_B ZQ61_C ZQ61_D ZQ61_E ZQ61_F ZQ61_G ZQ61_H ZQ61_I
1     9     9      1      2      2      2      2      2      2      2      2
2     2     4      1      2      2      2      2      2      2      2      2
3     3     2      1      2      2      2      2      2      2      2      2
4     5     4      1      2      2      2      2      2      2      2      2
5     8     8      2      2      2      1      2      2      2      2      2
6     8     8      1      2      2      2      2      2      2      2      2
  ZQ62
1    3
2    2
3    2
4    4
5    1
6    2
# データのクラス
class(d_csv_1)
[1] "data.frame"

hereを使用すれば次のように書ける.

d_csv_1 <- read.csv(here("data","raw","u001.csv"))

3.4.2 read_csv

# read_csvでcsvデータを読み込む
d_csv_2 <- read_csv("data/raw/u001.csv")
Rows: 1000 Columns: 72
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
dbl (72): caseid, sex, ybirth, mbirth, ZQ03, JC_1, JC_41, ZQ08A, ZQ08B, ZQ08...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# 確認
head(d_csv_2)
# A tibble: 6 × 72
  caseid   sex ybirth mbirth  ZQ03  JC_1 JC_41 ZQ08A ZQ08B ZQ08C ZQ08D ZQ08E
   <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  10001     1   1976     10     1     2    12     4     1     3     4     4
2  10002     1   1972      1     1     2     9     6     2     2     4     6
3  10003     1   1975      4     1     2     9     6     6     6     3     6
4  10004     2   1974     11     1     2     7     6     1     1     5     1
5  10005     1   1978      1     2    10    88     6     2     2     4     1
6  10006     1   1984      2     2    10    88     6     1     2     6     3
# ℹ 60 more variables: ZQ08F <dbl>, ZQ08G <dbl>, ZQ08H <dbl>, ZQ11_A <dbl>,
#   ZQ11_B <dbl>, ZQ11_C <dbl>, ZQ11_D <dbl>, ZQ11_E <dbl>, ZQ11_F <dbl>,
#   ZQ11_G <dbl>, ZQ11_H <dbl>, ZQ11_I <dbl>, ZQ11_J <dbl>, ZQ11_K <dbl>,
#   ZQ11_L <dbl>, ZQ11_M <dbl>, ZQ11_N <dbl>, ZQ11_O <dbl>, ZQ12 <dbl>,
#   ZQ14_1A <dbl>, ZQ14_1B <dbl>, ZQ14_1C <dbl>, ZQ14_1D <dbl>, ZQ23A <dbl>,
#   ZQ23B <dbl>, ZQ23C <dbl>, ZQ23D <dbl>, ZQ24 <dbl>, ZQ25 <dbl>, ZQ26A <dbl>,
#   ZQ26B <dbl>, ZQ26C <dbl>, ZQ26D <dbl>, ZQ26E <dbl>, ZQ26F <dbl>, …
# データのクラス
class(d_csv_2)
[1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame" 

hereを使用すれば次のように書ける.

d_csv_2 <- read_csv(here("data","raw","u001.csv"))
Rows: 1000 Columns: 72
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
dbl (72): caseid, sex, ybirth, mbirth, ZQ03, JC_1, JC_41, ZQ08A, ZQ08B, ZQ08...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

3.5 dta (Stata) の場合

値ラベルや変数ラベルといったメタデータ(データについてのデータ)も一緒に読み込まれるので,なれたらこちらを使うのも良いだろう.ただし読み込んだメタデータだけをみるだけではなく,基礎集計表やコードブックを参照するのがよいだろう.

# read_dtaでdtaデータを読み込む
d_dta <- read_dta("data/raw/u001.dta")
# 確認
head(d_dta)
# A tibble: 6 × 72
  caseid sex     ybirth mbirth ZQ03    JC_1     JC_41    ZQ08A   ZQ08B   ZQ08C  
   <dbl> <dbl+l>  <dbl>  <dbl> <dbl+l> <dbl+lb> <dbl+lb> <dbl+l> <dbl+l> <dbl+l>
1  10001 1 [mal…   1976     10 1 [し…  2 [正… 12     … 4 [週… 1 [毎… 3 [週…
2  10002 1 [mal…   1972      1 1 [し…  2 [正…  9     … 6 [ほ… 2 [週… 2 [週…
3  10003 1 [mal…   1975      4 1 [し…  2 [正…  9     … 6 [ほ… 6 [ほ… 6 [ほ…
4  10004 2 [fem…   1974     11 1 [し…  2 [正…  7     … 6 [ほ… 1 [毎… 1 [毎…
5  10005 1 [mal…   1978      1 2 [し… 10 [無… 88 [非… 6 [ほ… 2 [週… 2 [週…
6  10006 1 [mal…   1984      2 2 [し… 10 [無… 88 [非… 6 [ほ… 1 [毎… 2 [週…
# ℹ 62 more variables: ZQ08D <dbl+lbl>, ZQ08E <dbl+lbl>, ZQ08F <dbl+lbl>,
#   ZQ08G <dbl+lbl>, ZQ08H <dbl+lbl>, ZQ11_A <dbl+lbl>, ZQ11_B <dbl+lbl>,
#   ZQ11_C <dbl+lbl>, ZQ11_D <dbl+lbl>, ZQ11_E <dbl+lbl>, ZQ11_F <dbl+lbl>,
#   ZQ11_G <dbl+lbl>, ZQ11_H <dbl+lbl>, ZQ11_I <dbl+lbl>, ZQ11_J <dbl+lbl>,
#   ZQ11_K <dbl+lbl>, ZQ11_L <dbl+lbl>, ZQ11_M <dbl+lbl>, ZQ11_N <dbl+lbl>,
#   ZQ11_O <dbl+lbl>, ZQ12 <dbl+lbl>, ZQ14_1A <dbl+lbl>, ZQ14_1B <dbl+lbl>,
#   ZQ14_1C <dbl+lbl>, ZQ14_1D <dbl+lbl>, ZQ23A <dbl+lbl>, ZQ23B <dbl+lbl>, …
# データのクラス
class(d_dta)
[1] "tbl_df"     "tbl"        "data.frame"

Stataのファイルに含まれているラベルの情報も読み込まれる.hereを使用すれば次のように書ける.

d_dta <- read_dta(here("data","raw","u001.dta"))

3.6 sav (SPSS) の場合

# read_savでsavデータを読み込む
d_sav <- read_sav("data/raw/u001.sav")
# 確認
head(d_sav)
# A tibble: 6 × 72
  caseid sex     ybirth mbirth ZQ03    JC_1     JC_41    ZQ08A   ZQ08B   ZQ08C  
   <dbl> <dbl+l>  <dbl>  <dbl> <dbl+l> <dbl+lb> <dbl+lb> <dbl+l> <dbl+l> <dbl+l>
1  10001 1 [mal…   1976     10 1 [し…  2 [正… 12     … 4 [週… 1 [毎… 3 [週…
2  10002 1 [mal…   1972      1 1 [し…  2 [正…  9     … 6 [ほ… 2 [週… 2 [週…
3  10003 1 [mal…   1975      4 1 [し…  2 [正…  9     … 6 [ほ… 6 [ほ… 6 [ほ…
4  10004 2 [fem…   1974     11 1 [し…  2 [正…  7     … 6 [ほ… 1 [毎… 1 [毎…
5  10005 1 [mal…   1978      1 2 [し… 10 [無… 88 [非… 6 [ほ… 2 [週… 2 [週…
6  10006 1 [mal…   1984      2 2 [し… 10 [無… 88 [非… 6 [ほ… 1 [毎… 2 [週…
# ℹ 62 more variables: ZQ08D <dbl+lbl>, ZQ08E <dbl+lbl>, ZQ08F <dbl+lbl>,
#   ZQ08G <dbl+lbl>, ZQ08H <dbl+lbl>, ZQ11_A <dbl+lbl>, ZQ11_B <dbl+lbl>,
#   ZQ11_C <dbl+lbl>, ZQ11_D <dbl+lbl>, ZQ11_E <dbl+lbl>, ZQ11_F <dbl+lbl>,
#   ZQ11_G <dbl+lbl>, ZQ11_H <dbl+lbl>, ZQ11_I <dbl+lbl>, ZQ11_J <dbl+lbl>,
#   ZQ11_K <dbl+lbl>, ZQ11_L <dbl+lbl>, ZQ11_M <dbl+lbl>, ZQ11_N <dbl+lbl>,
#   ZQ11_O <dbl+lbl>, ZQ12 <dbl+lbl>, ZQ14_1A <dbl+lbl>, ZQ14_1B <dbl+lbl>,
#   ZQ14_1C <dbl+lbl>, ZQ14_1D <dbl+lbl>, ZQ23A <dbl+lbl>, ZQ23B <dbl+lbl>, …
# データのクラス
class(d_sav)
[1] "tbl_df"     "tbl"        "data.frame"

Stataと同様にSPSSのファイルに含まれているラベルの情報も読み込まれる. hereを使用すれば次のように書ける.

d_sav <- read_sav(here("data","raw","u001.sav"))

3.7 ラベルを取り除きたい

ラベルを取り除きたい場合は,zap_label()関数やzap_labels()関数を用いる.

  • zap_label():変数ラベルを取り除く
  • zap_labels():値ラベルを取り除く

以下では,d_savzap_label()関数とzap_labels()関数を適用し,変数ラベルと値ラベルを取り除き,d_sav_nolabという新しいオブジェクトとして保存している.

d_sav_nolab <- d_sav |> zap_label() |> zap_labels()
d_sav_nolab
# A tibble: 1,000 × 72
   caseid   sex ybirth mbirth  ZQ03  JC_1 JC_41 ZQ08A ZQ08B ZQ08C ZQ08D ZQ08E
    <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1  10001     1   1976     10     1     2    12     4     1     3     4     4
 2  10002     1   1972      1     1     2     9     6     2     2     4     6
 3  10003     1   1975      4     1     2     9     6     6     6     3     6
 4  10004     2   1974     11     1     2     7     6     1     1     5     1
 5  10005     1   1978      1     2    10    88     6     2     2     4     1
 6  10006     1   1984      2     2    10    88     6     1     2     6     3
 7  10007     2   1976      6     1     2     8     6     4     1     5     1
 8  10008     1   1975      4     1     2     9     5     2     2     4     4
 9  10009     2   1985      9     1     3     5     1     1     1     4     1
10  10010     1   1972      2     1     2     8     6     1     2     5     6
# ℹ 990 more rows
# ℹ 60 more variables: ZQ08F <dbl>, ZQ08G <dbl>, ZQ08H <dbl>, ZQ11_A <dbl>,
#   ZQ11_B <dbl>, ZQ11_C <dbl>, ZQ11_D <dbl>, ZQ11_E <dbl>, ZQ11_F <dbl>,
#   ZQ11_G <dbl>, ZQ11_H <dbl>, ZQ11_I <dbl>, ZQ11_J <dbl>, ZQ11_K <dbl>,
#   ZQ11_L <dbl>, ZQ11_M <dbl>, ZQ11_N <dbl>, ZQ11_O <dbl>, ZQ12 <dbl>,
#   ZQ14_1A <dbl>, ZQ14_1B <dbl>, ZQ14_1C <dbl>, ZQ14_1D <dbl>, ZQ23A <dbl>,
#   ZQ23B <dbl>, ZQ23C <dbl>, ZQ23D <dbl>, ZQ24 <dbl>, ZQ25 <dbl>, …

3.8 ラベルを加工したい

labelledパッケージを用いる.

library(labelled)

3.8.1 変数ラベルの加工

# すべての変数ラベルを確認
var_label(d_sav)
$caseid
NULL

$sex
[1] "問1(1)_性別"

$ybirth
[1] "問1(2)_生年"

$mbirth
[1] "問1(2)_生月"

$ZQ03
[1] "問3_就業状況"

$JC_1
[1] "問4A(1)_現職・働き方"

$JC_41
[1] "問4A(4-1)_現職・従事時間(1日あたり)"

$ZQ08A
[1] "問8A_ふだんの生活での頻度―運動"

$ZQ08B
[1] "問8B_ふだんの生活での頻度―1日に3食を食べる"

$ZQ08C
[1] "問8C_ふだんの生活での頻度―栄養バランスの取れた食事を取る"

$ZQ08D
[1] "問8D_ふだんの生活での頻度―カップ麺やファーストフードを食べる"

$ZQ08E
[1] "問8E_ふだんの生活での頻度―食事の用意"

$ZQ08F
[1] "問8F_ふだんの生活での頻度―洗濯"

$ZQ08G
[1] "問8G_ふだんの生活での頻度―家の掃除"

$ZQ08H
[1] "問8H_ふだんの生活での頻度―日用品・食料品の買い物"

$ZQ11_A
[1] "問11-1_今までの経験―親が失業した/親が事業で失敗した"

$ZQ11_B
[1] "問11-2_今までの経験―親が離婚した"

$ZQ11_C
[1] "問11-3_今までの経験―親が再婚した"

$ZQ11_D
[1] "問11-4_今までの経験―自分が事業で失敗した"

$ZQ11_E
[1] "問11-5_今までの経験―自分が失業した"

$ZQ11_F
[1] "問11-6_今までの経験―自分が転職した"

$ZQ11_G
[1] "問11-7_今までの経験―自分が同棲した"

$ZQ11_H
[1] "問11-8_今までの経験―自分が離婚した"

$ZQ11_I
[1] "問11-9_今までの経験―自分が再婚した"

$ZQ11_J
[1] "問11-10_今までの経験―自分が学校でいじめを受けた"

$ZQ11_K
[1] "問11-11_今までの経験―自分が大きな事故や災害にあった"

$ZQ11_L
[1] "問11-12_今までの経験―自分が暴行・強盗・恐喝などの犯罪被害にあった"

$ZQ11_M
[1] "問11-13_今までの経験―自分が手術や長期療養を要する病気・ケガをした"

$ZQ11_N
[1] "問11-14_今までの経験―自分が家族の看病・介護をした"

$ZQ11_O
[1] "問11-15_今までの経験―その他大きな出来事"

$ZQ12
[1] "問12_現在の暮らしむき"

$ZQ14_1A
[1] "問14(1)_兄の人数"

$ZQ14_1B
[1] "問14(1)_姉の人数"

$ZQ14_1C
[1] "問14(1)_弟の人数"

$ZQ14_1D
[1] "問14(1)_妹の人数"

$ZQ23A
[1] "問23_最後に通った学校―本人"

$ZQ23B
[1] "問23_最後に通った学校―配偶者"

$ZQ23C
[1] "問23_最後に通った学校―父親"

$ZQ23D
[1] "問23_最後に通った学校―母親"

$ZQ24
[1] "問24_最後に通った学校を卒業したか"

$ZQ25
[1] "問25_自分の健康状態"

$ZQ26A
[1] "問26A_過去1ヶ月間―かなり神経質であったこと"

$ZQ26B
[1] "問26B_過去1ヶ月間―どうにもならないくらい気分が落ち込んでいたこと"

$ZQ26C
[1] "問26C_過去1ヶ月間―落ち着いていておだやかな気分であったこと"

$ZQ26D
[1] "問26D_過去1ヶ月間―落ち込んで、憂鬱な気分であったこと"

$ZQ26E
[1] "問26E_過去1ヶ月間―楽しい気分であったこと"

$ZQ26F
[1] "問26F_過去1ヶ月間―健康上の理由で、家事や仕事などが制限されたこと"

$ZQ30D
[1] "問30D_現在の満足度―生活全般"

$ZQ35
[1] "問35_自分自身の階層の位置づけ"

$ZQ39A
[1] "問39A_男性の仕事は収入を得ること、女性の仕事や家庭と家族の面倒をみることだ"

$ZQ42
[1] "問42_ふだん支持している政党"

$ZQ43
[1] "問43_政治上の出来事への感心"

$ZQ47A
[1] "問47_過去1年間の収入―本人"

$ZQ47B
[1] "問47_過去1年間の収入―配偶者"

$ZQ47C
[1] "問47_過去1年間の収入―世帯全体"

$ZQ50
[1] "問50_婚姻状態"

$ZQ52A
[1] "問52_配偶者生年―元号"

$ZQ52Y
[1] "問52_配偶者生年―年"

$ZQ54A
[1] "問54A_頻度―配偶者が食事の用意"

$ZQ54B
[1] "問54B_頻度―洗濯"

$ZQ54C
[1] "問54C_頻度―家の掃除"

$ZQ54D
[1] "問54D_頻度―日用品・食料品の買い物"

$ZQ61_A
[1] "問61-1_10年後の働き方―正社員・正職員として働いていたい"

$ZQ61_B
[1] "問61-2_10年後の働き方―自分で事業をおこしていたい"

$ZQ61_C
[1] "問61-3_10年後の働き方―親の家業を継いでいたい"

$ZQ61_D
[1] "問61-4_10年後の働き方―独立して一人で仕事をしていたい"

$ZQ61_E
[1] "問61-5_10年後の働き方―アルバイトやパートで働いていたい"

$ZQ61_F
[1] "問61-6_10年後の働き方―専業主婦・主夫でいたい"

$ZQ61_G
[1] "問61-7_10年後の働き方―働かないでいたい"

$ZQ61_H
[1] "問61-8_10年後の働き方―その他"

$ZQ61_I
[1] "問61-9_10年後の働き方―わからない"

$ZQ62
[1] "問62_10年後の自分の暮らしむき"
var_label(d_sav$sex)
[1] "問1(1)_性別"
# 変数のラベルにアクセスして修正
var_label(d_sav$sex) <- "問1(1)_性別(Male = 男性, Female = 女性)"
var_label(d_sav$sex)
[1] "問1(1)_性別(Male = 男性, Female = 女性)"
str(d_sav$sex)
 dbl+lbl [1:1000] 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, 2, 1, ...
 @ label        : chr "問1(1)_性別(Male = 男性, Female = 女性)"
 @ format.spss  : chr "F8.0"
 @ display_width: int 10
 @ labels       : Named num [1:2] 1 2
  ..- attr(*, "names")= chr [1:2] "male" "female"

3.8.2 値ラベルの加工

# すべての値ラベルを確認
d_sav |> val_labels()
$caseid
NULL

$sex
  male female 
     1      2 

$ybirth
NULL

$mbirth
NULL

$ZQ03
  している していない 
         1          2 

$JC_1
                        経営者,役員                       正社員・正職員 
                                   1                                    2 
パート・アルバイト・契約・臨時・嘱託                             派遣社員 
                                   3                                    4 
                            請負社員                   自営業主・自由業者 
                                   5                                    6 
                          家族従事者                                 内職 
                                   7                                    8 
                              その他                   無職(学生は除く) 
                                   9                                   10 
                学生(働いていない)       学生(現在非正規で働いている) 
                                  11                                   12 
                              非該当                               無回答 
                                  88                                   99 

$JC_41
非該当 無回答 
    88     99 

$ZQ08A
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         無回答 
             6              9 

$ZQ08B
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         無回答 
             6              9 

$ZQ08C
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         無回答 
             6              9 

$ZQ08D
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         無回答 
             6              9 

$ZQ08E
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         無回答 
             6              9 

$ZQ08F
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         無回答 
             6              9 

$ZQ08G
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         無回答 
             6              9 

$ZQ08H
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         無回答 
             6              9 

$ZQ11_A
 ○選択 非選択 
     1      2 

$ZQ11_B
 ○選択 非選択 
     1      2 

$ZQ11_C
 ○選択 非選択 
     1      2 

$ZQ11_D
 ○選択 非選択 
     1      2 

$ZQ11_E
 ○選択 非選択 
     1      2 

$ZQ11_F
 ○選択 非選択 
     1      2 

$ZQ11_G
 ○選択 非選択 
     1      2 

$ZQ11_H
 ○選択 非選択 
     1      2 

$ZQ11_I
 ○選択 非選択 
     1      2 

$ZQ11_J
 ○選択 非選択 
     1      2 

$ZQ11_K
 ○選択 非選択 
     1      2 

$ZQ11_L
 ○選択 非選択 
     1      2 

$ZQ11_M
 ○選択 非選択 
     1      2 

$ZQ11_N
 ○選択 非選択 
     1      2 

$ZQ11_O
 ○選択 非選択 
     1      2 

$ZQ12
      豊か   やや豊か     ふつう やや貧しい     貧しい     無回答 
         1          2          3          4          5          9 

$ZQ14_1A
無回答 
    99 

$ZQ14_1B
無回答 
    99 

$ZQ14_1C
無回答 
    99 

$ZQ14_1D
無回答 
    99 

$ZQ23A
                         中学校                        高等学校 
                              1                               2 
           専修学校(専門学校) 短期大学・高等専門学校(5年制) 
                              3                               4 
                           大学                          大学院 
                              5                               6 
                     わからない                          無回答 
                              7                               9 

$ZQ23B
                         中学校                        高等学校 
                              1                               2 
           専修学校(専門学校) 短期大学・高等専門学校(5年制) 
                              3                               4 
                           大学                          大学院 
                              5                               6 
                     わからない                  配偶者はいない 
                              7                               8 
                         無回答 
                              9 

$ZQ23C
                         中学校                        高等学校 
                              1                               2 
           専修学校(専門学校) 短期大学・高等専門学校(5年制) 
                              3                               4 
                           大学                          大学院 
                              5                               6 
                     わからない                          無回答 
                              7                               9 

$ZQ23D
                         中学校                        高等学校 
                              1                               2 
           専修学校(専門学校) 短期大学・高等専門学校(5年制) 
                              3                               4 
                           大学                          大学院 
                              5                               6 
                     わからない                          無回答 
                              7                               9 

$ZQ24
卒業した 中退した   在学中   無回答 
       1        2        3        9 

$ZQ25
    とても良い       まあ良い           普通 あまり良くない           悪い 
             1              2              3              4              5 
        無回答 
             9 

$ZQ26A
        いつもあった ほとんどいつもあった       ときどきあった 
                   1                    2                    3 
        まれにあった     まったくなかった               無回答 
                   4                    5                    9 

$ZQ26B
        いつもあった ほとんどいつもあった       ときどきあった 
                   1                    2                    3 
        まれにあった     まったくなかった               無回答 
                   4                    5                    9 

$ZQ26C
        いつもあった ほとんどいつもあった       ときどきあった 
                   1                    2                    3 
        まれにあった     まったくなかった               無回答 
                   4                    5                    9 

$ZQ26D
        いつもあった ほとんどいつもあった       ときどきあった 
                   1                    2                    3 
        まれにあった     まったくなかった               無回答 
                   4                    5                    9 

$ZQ26E
        いつもあった ほとんどいつもあった       ときどきあった 
                   1                    2                    3 
        まれにあった     まったくなかった               無回答 
                   4                    5                    9 

$ZQ26F
        いつもあった ほとんどいつもあった       ときどきあった 
                   1                    2                    3 
        まれにあった     まったくなかった               無回答 
                   4                    5                    9 

$ZQ30D
                満足している どちらかといえば満足している 
                           1                            2 
          どちらともいえない   どちらかといえば不満である 
                           3                            4 
                  不満である                       無回答 
                           5                            9 

$ZQ35
無回答 
    99 

$ZQ39A
                    そう思う     どちらかといえばそう思う 
                           1                            2 
          どちらともいえない どちらかといえばそう思わない 
                           3                            4 
                そう思わない                   わからない 
                           5                            6 
                      無回答 
                           9 

$ZQ42
                自民党                 民主党                 公明党 
                     1                      2                      3 
                共産党                 社民党               国民新党 
                     4                      5                      6 
              新党日本           その他の政党 特に支持する政党はない 
                     7                      8                      9 
            わからない                 無回答 
                    10                     99 

$ZQ43
    つねに関心を払っている   ときどき関心を払っている 
                         1                          2 
    たまに関心を払っている ほとんど関心を払っていない 
                         3                          4 
                    無回答 
                         9 

$ZQ47A
                                   なし                              25万円未満 
                                      1                                       2 
         50万円くらい(25~75万円未満)        100万円くらい(75~150万円未満) 
                                      3                                       4 
      200万円くらい(150~250万円未満)       300万円くらい(250~350万円未満) 
                                      5                                       6 
      400万円くらい(350~450万円未満)       500万円くらい(450~600万円未満) 
                                      7                                       8 
      700万円くらい(600~850万円未満)   1,000万円くらい(850~1,250万円未満) 
                                      9                                      10 
1,500万円くらい(1,250~1,750万円未満) 2,000万円くらい(1,750~2,250万円未満) 
                                     11                                      12 
                          2,250万円以上                              わからない 
                                     13                                      14 
                                 無回答 
                                     99 

$ZQ47B
                                   なし                              25万円未満 
                                      1                                       2 
         50万円くらい(25~75万円未満)        100万円くらい(75~150万円未満) 
                                      3                                       4 
      200万円くらい(150~250万円未満)       300万円くらい(250~350万円未満) 
                                      5                                       6 
      400万円くらい(350~450万円未満)       500万円くらい(450~600万円未満) 
                                      7                                       8 
      700万円くらい(600~850万円未満)   1,000万円くらい(850~1,250万円未満) 
                                      9                                      10 
1,500万円くらい(1,250~1,750万円未満) 2,000万円くらい(1,750~2,250万円未満) 
                                     11                                      12 
                          2,250万円以上                              わからない 
                                     13                                      14 
                         配偶者はいない                                  無回答 
                                     15                                      99 

$ZQ47C
                                   なし                              25万円未満 
                                      1                                       2 
         50万円くらい(25~75万円未満)        100万円くらい(75~150万円未満) 
                                      3                                       4 
      200万円くらい(150~250万円未満)       300万円くらい(250~350万円未満) 
                                      5                                       6 
      400万円くらい(350~450万円未満)       500万円くらい(450~600万円未満) 
                                      7                                       8 
      700万円くらい(600~850万円未満)   1,000万円くらい(850~1,250万円未満) 
                                      9                                      10 
1,500万円くらい(1,250~1,750万円未満) 2,000万円くらい(1,750~2,250万円未満) 
                                     11                                      12 
                          2,250万円以上                              わからない 
                                     13                                      14 
                                 無回答 
                                     99 

$ZQ50
              未婚 既婚(配偶者あり)               死別               離別 
                 1                  2                  3                  4 

$ZQ52A
  西暦   昭和   平成 非該当 無回答 
     1      2      3      8      9 

$ZQ52Y
非該当 無回答 
   888    999 

$ZQ54A
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         非該当         無回答 
             6              8              9 

$ZQ54B
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         非該当         無回答 
             6              8              9 

$ZQ54C
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         非該当         無回答 
             6              8              9 

$ZQ54D
          毎日     週に5~6日     週に3~4日     週に1~2日     月に1~3日 
             1              2              3              4              5 
ほとんどしない         非該当         無回答 
             6              8              9 

$ZQ61_A
 ○選択 非選択 無回答 
     1      2      9 

$ZQ61_B
 ○選択 非選択 無回答 
     1      2      9 

$ZQ61_C
 ○選択 非選択 無回答 
     1      2      9 

$ZQ61_D
 ○選択 非選択 無回答 
     1      2      9 

$ZQ61_E
 ○選択 非選択 無回答 
     1      2      9 

$ZQ61_F
 ○選択 非選択 無回答 
     1      2      9 

$ZQ61_G
 ○選択 非選択 無回答 
     1      2      9 

$ZQ61_H
 ○選択 非選択 無回答 
     1      2      9 

$ZQ61_I
 ○選択 非選択 無回答 
     1      2      9 

$ZQ62
    良くなる 少し良くなる   変わらない 少し悪くなる     悪くなる       無回答 
           1            2            3            4            5            9 
# sexのラベルを確認
d_sav$sex |> val_labels()
  male female 
     1      2 
# 変数のラベルにアクセスして修正
val_label(d_sav$sex, 1) <- "Male"
val_label(d_sav$sex, 2) <- "Female"

# 修正後
d_sav$sex |> val_labels()
  Male Female 
     1      2 
d_sav |> dplyr::count(sex)
# A tibble: 2 × 2
  sex            n
  <dbl+lbl>  <int>
1 1 [Male]     499
2 2 [Female]   501
str(d_sav$sex)
 dbl+lbl [1:1000] 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, 2, 1, ...
 @ labels: Named num [1:2] 1 2
  ..- attr(*, "names")= chr [1:2] "Male" "Female"
 @ label : chr "問1(1)_性別(Male = 男性, Female = 女性)"

3.9 ロングデータの作成

パネルデータで分析を行う場合に,ロング形式のデータにしたほうがよい. pivot_longerを使えば簡単にロング形式のデータが作成できる.

https://r4ds.hadley.nz/data-tidy.html#sec-pivoting を参照.

まずはidと必要な変数zq1zq5aq1aq5を準備する. transmuteで必要があれば変換して,新たな名前を与える.この時変数名__年のようにする._でもよいが,その場合は他の変数に_が含まれていないことを確認する.

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── 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
d_wide <- tibble(
  id = 1:10,
  zq1 = rnorm(10),
  zq5 = rbinom(10, size = 1, prob = .5),
  aq1 = rnorm(10),
  aq5 = rbinom(10, size = 1, prob = .5)
)
d_wide
# A tibble: 10 × 5
      id     zq1   zq5    aq1   aq5
   <int>   <dbl> <int>  <dbl> <int>
 1     1 -0.0745     1  1.00      1
 2     2 -1.20       0 -1.54      1
 3     3 -1.28       1  1.35      0
 4     4 -0.163      0  0.531     0
 5     5  0.594      1  0.632     1
 6     6  0.0291     0  0.610     1
 7     7 -0.845      0 -1.17      0
 8     8  0.900      0 -1.57      0
 9     9 -1.18       1  0.668     1
10    10  1.25       1 -0.296     1
d_long <- d_wide |> 
  transmute(id,
            y__2007 = zq1,
            x__2007 = zq5,
            y__2008 = aq1,
            x__2008 = aq5) |> 
  pivot_longer(
    cols = y__2007:x__2008, 
    names_to = c(".value", "year"), 
    names_sep = "__", 
    values_drop_na = TRUE
  ) |> 
  mutate(year = parse_number(year))
d_long
# A tibble: 20 × 4
      id  year       y     x
   <int> <dbl>   <dbl> <int>
 1     1  2007 -0.0745     1
 2     1  2008  1.00       1
 3     2  2007 -1.20       0
 4     2  2008 -1.54       1
 5     3  2007 -1.28       1
 6     3  2008  1.35       0
 7     4  2007 -0.163      0
 8     4  2008  0.531      0
 9     5  2007  0.594      1
10     5  2008  0.632      1
11     6  2007  0.0291     0
12     6  2008  0.610      1
13     7  2007 -0.845      0
14     7  2008 -1.17       0
15     8  2007  0.900      0
16     8  2008 -1.57       0
17     9  2007 -1.18       1
18     9  2008  0.668      1
19    10  2007  1.25       1
20    10  2008 -0.296      1

次のようにseparate()関数を用いることもできる.

d_wide |> 
  transmute(id,
            y__2007 = zq1,
            x__2007 = zq5,
            y__2008 = aq1,
            x__2008 = aq5) |> 
  pivot_longer(cols = y__2007:x__2008) |> 
  separate(name, into = c("var", "year")) |> 
  pivot_wider(id_cols = c(id, year), 
              names_from = var, 
              values_from = value) |> 
  mutate(year = parse_number(year))
# A tibble: 20 × 4
      id  year       y     x
   <int> <dbl>   <dbl> <dbl>
 1     1  2007 -0.0745     1
 2     1  2008  1.00       1
 3     2  2007 -1.20       0
 4     2  2008 -1.54       1
 5     3  2007 -1.28       1
 6     3  2008  1.35       0
 7     4  2007 -0.163      0
 8     4  2008  0.531      0
 9     5  2007  0.594      1
10     5  2008  0.632      1
11     6  2007  0.0291     0
12     6  2008  0.610      1
13     7  2007 -0.845      0
14     7  2008 -1.17       0
15     8  2007  0.900      0
16     8  2008 -1.57       0
17     9  2007 -1.18       1
18     9  2008  0.668      1
19    10  2007  1.25       1
20    10  2008 -0.296      1

なお,パネル固定効果モデルはplmパッケージのplmestimatrパッケージのlm_robustfixestパッケージのfeolsで実行できる.feolsであると早く推定ができる.