R言語(R)はプログラミング言語の中でも統計解析に特化しているという点で,実用的なイメージがしやすく勉強しやすい言語です。
Rでは,データフレーム内の変数の指定の際に$記号を使用しますが,この$記号の意味や使い方などについて説明します。
$記号は変数指定の際に使用する
Excelでは$記号は関数を使用する際の絶対参照で使うことが多いですが,Rでは,変数指定の際に使用する記号になります。
※Rのようなプログラム言語では,データを格納する箱(dat,x,iなど)のことを変数と言いますが,この記事内では,統計解析の際に使う独立変数や従属変数のことを「変数」と呼び,プログラミング上の変数のことは単にdatなどと呼びます。
特にRではデータフレーム(data frame)で使用されることが多いです。
データフレームとはRで利用される数値や文字といった異なるタイプのデータをまとめて取り扱うことのできる保存形式のことです。
こう書くと難しく感じますが,データをまとめる際に以下のような形で,エクセルでまとめるような縦にIDを,横に変数を並べていくような保存形式です。
ID method kokugo sugaku eigo rika syakai
※架空データです。
1 A 57 51 69 70 48
2 A 60 55 68 64 52
3 A 51 59 62 62 49
4 A 54 58 67 63 47
5 A 51 57 61 69 53
6 B 59 67 70 52 60
7 B 63 54 70 54 57
8 B 56 66 70 47 51
9 B 56 68 67 46 51
10 B 59 71 71 48 59
例えば,上記のデータフレームがR上のdatに格納されているとします。
このとき,datの中にある変数名を直接指定しても以下のようなエラーが出ます。
> method
エラー: オブジェクト ‘method’ がありません
> kokugo
エラー: オブジェクト ‘kokugo’ がありません
データフレーム内の変数名を指定するときに,$を使います。
今回であれば,以下のようにすることでmethodの値を出力することができます。
dat$method
[1] “A” “A” “A” “A” “A” “B” “B” “B” “B” “B”
dat$kokugo
[1] 57 60 51 54 51 59 63 56 56 59
$記号の使用用途
$記号を使用することで,以下のことができます。
- データフレーム内の特定の変数に対してRの関数を実行する
- 関数から返される値から特定の値を取り出す
以下,順番に説明します。
データフレーム内の特定の変数に対してRの関数を実行する
例えば,平均を計算する関数mean()は以下のように用います。
> mean(dat$kokugo)
[1] 56.6
なお,mean()は平均を計算する関数であるため,datのようなデータフレームを入れてもエラーが返ってきます。
> mean(dat)
[1] NA
警告メッセージ:
mean.default(dat) で:
引数は数値でも論理値でもありません。NA 値を返します
他にも,2群の平均値を比べるt検定をRで行う場合は,従属変数や独立変数を指定する際には以下のように$記号を用いることで出力できます。
> t.test(dat$kokugo~dat$method,var.equal=TRUE)
Two Sample t-test
data: dat$kokugo by dat$method
t = -1.8411, df = 8, p-value = 0.1029
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-9.009923 1.009923
sample estimates:
mean in group A mean in group B
54.6 58.6
このように,データフレームのどの変数に対して関数を実行するのかを指定する際に$記号を用います。
関数から返される値から特定の値を取り出す
上記で行ったt検定は、Rで用意されているt.test()という関数を使用しましたが、こういった関数から出力される値には様々な情報が含まれています。
この中から特定の値を取り出したいときにも$記号を使うことで出力することができる場合もあります。
例えば,上記のt.test()の結果をresultに格納したうえで,names()を使って,t.test()から返される値に何が入っているのかを確認すると,以下の情報が入っていることが分かります。
result<-t.test(dat$kokugo~dat$method,var.equal=TRUE)
names(result)
[1] “statistic” “parameter” “p.value” “conf.int” “estimate” “null.value”
[7] “stderr” “alternative” “method” “data.name”
resultには1~10個の情報が入っていることがわかります。
このうち,1番目の”statistic”には,t値(-1.8411)が入っていますが,その値を取り出したいときには,$記号を使って以下のように記述することで取り出せます。
result$statistic
t
-1.841149
このように,$記号を使えば出力された結果からさらに必要な値だけを抽出することが可能です。
これを応用すれば,自分が必要な出力結果だけをまとめたデータフレームをつくることも可能です。
※全ての関数でできるわけではなさそうです。
例えば、要約統計量をまとめて出力できるsummary()では、上記の方法では出力される値をうまく取り出すことはできませんでした。
names()を使って情報が出力できそうであれば使用できると思います。
attach()でデータ格納元を省略することもできる
$記号を使うことでdatに格納された変数名を自由に取り出すことができることがわかりました。
ただ、毎回dat $変数名 というように、必要になるたびにdatを書くのは少しめんどくさいですよね。
その場合はattach()を使っておくことで、参照元を省略することができます。
> attach(dat)
> kokugo
[1] 57 60 51 54 51 59 63 56 56 59
> t.test(kokugo~method,var.equal=TRUE)
Two Sample t-test
data: kokugo by method
t = -1.8411, df = 8, p-value = 0.1029
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:-9.009923 1.009923sample estimates:
mean in group A mean in group B
54.6 58.6
見た目がすっきりしますね。
なお、解除する際には
dettach()を使うことで元に戻せます。
> detach(dat)
> kokugo
エラー: オブジェクト ‘kokugo’ がありません
> t.test(kokugo~method,var.equal=TRUE)
eval(predvars, data, env) でエラー: オブジェクト ‘kokugo’ がありません
スクリプトに一連の流れを残すときはattach()〜dettach()までをセットにしておくと良いです。
まとめ
今回はRにおける$記号の意味について紹介しました。
・$記号は変数指定の際に使用する
・$記号を使ってt.test()のような関数から返される出力結果の各値を取り出すことも可能
・データ参照元を省略したい場合はattach()を使用する