アメリエフの技術ブログ

Amelieff Staff Blog

特定の列をキーに行列を並び替える

ベクトルやリストを並び替えるときはsort()関数を使いますが
行列(マトリクス)やデータフレームを、特定の列をキーにして
並び替える場合はorder()という関数を使います。

同じジュースが、250ml・100円、350ml・120円、180ml・80円で
売られています。
1円あたりの容量が多いのはどれか、調べてみたいと思います。

まず、データを行列に入れます。

> juice <- matrix(c(250, 350, 180, 100, 120, 80), nrow=3)
> colnames(juice) <- c("volume", "price")
> juice

_____volume_price
[1,]____250___100
[2,]____350___120
[3,]____180____80

容量を価格で割った値を3列目に追加し、その列でソートします。

> juice <- cbind(juice, rate=juice[,1]/juice[,2])
> juice[order(juice[,3]),]

_____volume_price_____rate
[1,]____180____80 2.250000
[2,]____250___100 2.500000
[3,]____350___120 2.916667

僅差ですが、350mlが一番お得なようです。

なお、降順にソートしたい場合はorderのオプションに
「decreasing=TRUE」をつければOKです。