2012年3月14日水曜日

R: sort と order の違い

sort() は、小さい順に整列させる関数、
order() は、『整列した各要素の元の位置』を返す関数。

データフレームに対して:order
ベクトルに対して:sort

だと思っておけば、間違えることは少ないはず……


例)データフレーム d を、列 a について整列させたい。

間違い
> d <-data.frame(ID =c("a","b","c","d","e","f"), a =c(1,4,3,6,2,5)) 
> d
   ID a
1  a 1
2  b 4
3  c 3
4  d 6
5  e 2
6  f 5
> sort(d$a)
[1] 1 2 3 4 5 6
> d[sort(d$a),]
   ID a
1  a 1
2  b 4
3  c 3
4  d 6
5  e 2
6  f 5
sort が返すのは 1, 2, 3, 4, 5, 6 という値なので、1行目、2行目、3行目、4行目、5行目、6行目、というふうに取り出されている。

  正解
> order(d$a)
[1] 1 5 3 2 6 4
> d[order(d$a),]
   ID a
1  a 1
5  e 2
3  c 3
2  b 4
6  f 5
4  d 6
(私は間違えたのです)


参考リンク:14. ベクトル計算