Rでデータ分析をする。
今回,とある調査で調査票を5分割した。項目が多すぎるので,いくつか共通項目をつくりつつ,項目をばらまいて調査票をデザインしたのだ。
こう言うことをすると,まとめるのが大変である。項目の順番もランダマイズしているので,調査票AのQ1は,通し項目番号では25,といった感じでバラッバラなのである。
とりあえず,A〜EのデータをRに取り込む。
次に,ラベル(data.frameなのでnamesだね)を通し項目番号に上書き。ここはエクセルの並べかえと,秀丸のエディタ機能が役に立った。
次に,いよいよマージなのだが,自前のmerge関数で「同じ列ラベルでくくる」ということが自然とできた。引数の,all=Tにしておくことがポイントで,これをつけておくとあるデータセットにない列ラベルがあったら,そこをすべて欠損で置き換えてくれる。ということで,5つのファイルがひとつに簡単にまとまった。計算処理スピードも早いよ。
最後に,これは好みの問題だけど,列ラベルの順番がバラバラなので,それもソート。
order関数が文字列(列ラベル)にも適用できたので,すぐに終わりました。
美しくないけど,マージのコードは次のとおり。最後は列ソートね。
MG1 <- merge(typeA,typeB,all=T) MG2 <- merge(MG1,typeC,all=T) MG3 <- merge(MG2,typeD,all=T) typeALL <- merge(MG3,typeE,all=T) typeALL <- typeALL[,order(names(typeALL))]
いやはや,なんとも便利なことで。
最初はltmパッケージの,テスト等化用関数を使っていたのだけど,ただのmergeで出来るならそれに越したことはない。
昔はこの手のことをやろうと思ったら,Excel上で手作業ですよ。3時間はかかっただろうな。
ミスを恐れるなら,VBなんかでプログラムを書いただろうね。院生の頃ならそうしてたね。
いまやRさまさまですわ。さ,分析も楽しませてもらおうか!