集めたデータはRaw dataと呼ばれ、このRaw dataを整形(データクレンジング)・加工することが分析の第一歩といっても過言ではありません。
そこで、今回はRのreshapeパッケージを取り上げます。
reshapeパッケージとは
reshapeパッケージは、データ整形と集計の両方に対して、非常に汎用性の高いパッケージです。
できるだけ複雑にならないように、シンプルなデータを使って説明していきますので、統計初心者の方でも大丈夫ですよ。
もし、reshapeをインストールしていないのであれば、まずは、
install.packages("reshape")
を実行してインストールして下さい。インストールは一度だけですので、以前にreshapeを使用したことがあるなら、
library(reshape)
とreshapeを起動してくださいね。
reshpaeの基本は
- データを「melt関数」でwide format(横並び)からlong format(縦並び)へ変換
- データを分析しやすい形に「cast関数」に整形・加工
です。castの際に、任意の関数でデータを集計することができます。
では、サンプルデータを作成していきます。
2人の被検者(id:1と2)の握力(grip)と30秒立ち上がり回数(sit_to_stand)を6か月毎で3回(time:1-3)で測定した架空のデータです。
下の表のようなデータをRでは、wide formatと呼びます。とても一般的な形ですね。
id | time | grip | sit_to_stand |
1 | 1 | 26.4 | 21 |
1 | 2 | 26.5 | 24 |
1 | 3 | 26.9 | 30 |
2 | 1 | 22.9 | 10 |
2 | 2 | 24.0 | 16 |
2 | 3 | 28.3 | 21 |
以下のスクリプトをコピペして上表を作成しましょう。
id <- c(1,1,1,2,2,2)
time <- c(1,2,3,1,2,3)
grip <- c(26.4,26.5,26.9,22.9,24,28.3)
sit_to_stand <- c(21,24,30,10,16,21)
mydata <- data.frame(id,time,grip,sit_to_stand)
すると、mydataに上の表のデータが代入されました。
サンプルデータはidとtimeの組み合わせによって、各測定値が対応した形となっています。
melt()関数
では早速、データを整形・加工していきます。
STEP1として、
まず、wide formatをlong formatに変換するために、melt()関数を使います。
なぜなら、Rでデータを分析する際はlong formatの方が扱いやすいという性質があるためです。
データをmeltするとき、そのままの並びで維持しておきたい変数を「id=」で指定します。
今回のデータはidとtimeが測定データ(握力・立ち上がり)に対応しているので、引数にid=(c("id", "time")を追加します。
つまり、idとtimeの並びを維持したまま、
- 測定項目(gripとsit_to_stand)がvariable変数
- 測定値がvalue変数
に並び変わります。以下のスクリプトを実行してください。
mydata_melt <- melt(mydata, id=(c("id", "time")))
すると、以下の図のようなlong formatに整形されます
cast関数を使ってデータを加工する
STEP2として、
cast()関数は、meltされたデータを分析しやすい形にオプション関数を使って整形します。
object <- cast(melt data, Formula, Function)
- Data: 分析に使うデータ名
- Formula: 最終的な結果、具体的には「行(表側)~列(表頭)」の形を指定する
- Function: オプション関数
行(表側):idと variable ~ 列(表頭):time
mydata1 <- cast(mydata, id + variable ~time)
この表なら1~3回目でどの様に値が変化しているかが分かりやすいですね。
行(表側):id ~ 列(表頭):variable, time
mydata2 <- cast(mydata, id ~ variable + time)
この表だとid1とid2が1行ずつに並ぶので、被検者を上下に比較するのも簡単です。
行(表側):id ~ 列(表頭):variableごとの平均値
mydata3 <- cast(mydata, id ~ variable, mean)
実行すると各被検者ごとの握力・立ち上がりの平均値が算出された表になりました。
行(表側):time ~ 列(表頭):variableごとの平均値
mydata4 <- cast(mydata, time ~ variable, mean)
今度は6か月毎に実施した1~3回の被検者1と2を平均した値が算出されました。
まとめ
解析の前にデータの形を変えたり、集計したりすることはよくありますね。この時、melt()関数とcast()関数を使いこなせれば、とても便利です。慣れるまでは少しコツが必要ですが、いろいろと試してみて下さいね。
コメント