2015年5月26日火曜日

Rのデータフレームを降順でソートする(decreasing=Tを使わずに)

ほんと、ちょっとした小ネタです。

↓こちらの本を読んでいて知った(気付いた)方法。

RとRubyによるデータ解析入門
RとRubyによるデータ解析入門

まず、サンプル用のデータフレームを作ります。

name <- c("Ana", "Bill", "Chris", "Dan", "Emily")
age  <- c(18, 59, 57, 6, 31)
tbl <- data.frame(name, age)
tbl
 
   name age
1   Ana  18
2  Bill  59
3 Chris  57
4   Dan   6
5 Emily  31


このデータフレームを年齢順にソートしたい場合は、ソート結果のインデックスを返してくれるorder関数を使って、↓こんな風にしますよね。

tbl[order(tbl$age), ]

   name age
4   Dan   6
1   Ana  18
5 Emily  31
3 Chris  57
2  Bill  59


order関数のデフォルトは昇順なので、降順にしたい場合は、↓こうですよね。

tbl[order(tbl$age, decreasing=T), ]

   name age
2  Bill  59
3 Chris  57
5 Emily  31
1   Ana  18
4   Dan   6


でも、"decreasing=T"って打ち込むのって、けっこう面倒じゃないですか? あと、"decreasing"の綴りが思い付かなかったり(英語力・・・)。


【クイズ】マッチ棒を1本足すだけで、逆にしてください

tbl[order(-tbl$age), ]

   name age
2  Bill  59
3 Chris  57
5 Emily  31
1   Ana  18
4   Dan   6


おお、マイナスをかければ、大小関係が逆になりますからね。

でも、可読性は低いと思うので、長い期間使うつもりのスクリプトとか、誰かと共有するスクリプトを書くときは、やめた方が良さそう。「なんで、ここマイナスかけてるの?」とか、聞かれてもめんどくさいし。

なので、個人的でテンポラリな確認作業とかやっているときの、タイピングの省力化などにご活用ください。