データのマージとソート

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さまさまですわ。さ,分析も楽しませてもらおうか!

日記
父の日

昨日は父の日でしたね。 これまでやったこともやられたこともなかったので、意識したこともなかったが…… …

日記
蕁麻疹て結局なんも分からんのやないか

皮膚科に行きました。 朝起きたら、例によって下半身があちこち噛まれたような跡になってて痒い。ただ、以 …

日記
布団の外科手術

夜中に足が痒くて目が覚めるんですよ。 見たら、ものすごく「何か」に咬まれてる。蚊にかまれたみたいな跡 …