2016-12-02 5 views
1

私はすぐに、{dplyr}のarrange()がsort()よりも優れていることを知りました。ちょうど興味深いのは、sort()関数が返すオブジェクトが数値クラスであるからです。例:並べ替えが数値ベクトルとして返されるため、並べ替え(並べ替え)が悪いですか?

df <- data.frame(a=round(rpois(10,10)), b=LETTERS[1:10], stringsAsFactors = F) 
df 
    a b 
1 13 A 
2 7 B 
3 11 C 
4 6 D 
5 10 E 
6 10 F 
7 10 G 
8 6 H 
9 11 I 
10 9 J 

私がデータフレームを並べ替える場合、並べ替えがうまくいくことがわかりました。

arrange(df, desc(a)) 
    a b 
1 13 A 
2 11 C 
3 11 I 
4 10 E 
5 10 F 
6 10 G 
7 9 J 
8 7 B 
9 6 D 
10 6 H 

元のデータフレームを注文しようとすると、何が行われますか?

df[sort(df[,1]),] 
     a b 
6 10 F 
6.1 10 F 
7 10 G 
9 11 I 
10 9 J 
10.1 9 J 
10.2 9 J 
NA NA <NA> 
NA.1 NA <NA> 
NA.2 NA <NA> 

だから、数値ベクトルで並べ替えるのは一般的には良い考えではないと思います。

sort(df[,1]) 
[1] 6 6 7 9 10 10 10 11 11 13 
class(sort(df[,1])) 
[1] "numeric" 

sort()で再配置しようとしたときに何が起こったのかを知りたいと思います。おかげさまで

答えて

2

orderを使用してインデックスを提供することができます。

df[order(-df$a),] 

我々はsortを使用している場合は、TRUE

df[sort(df$a, decreasing = TRUE, index.return = TRUE)$ix,] 
+1

これは質問に幾分接線方向であるとしてindex.returnオプションを使用しますが、順序を使用しての欠点があります。 'sort'は部分ソートを可能にします(' sort.list'は引数としてpartialを持ちますが、まだサポートされていません)。 – Shape

+0

@Shapeコメントありがとうございます。部分ソートについて知っておくと良い – akrun

関連する問題