PR

分析上手のコツ!Rのreshape(melt,cast) でデータを簡単に加工・整形

R basic
記事内に広告が含まれています。

集めたデータは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と呼びます。とても一般的な形ですね。

idtimegripsit_to_stand
1126.421
1226.524
1326.930
2122.910
2224.016
2328.321

以下のスクリプトをコピペして上表を作成しましょう。

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()関数を使いこなせれば、とても便利です。慣れるまでは少しコツが必要ですが、いろいろと試してみて下さいね。

コメント