2017-01-25 26 views
2

dplyrのtop_n関数の出力を理解できません。誰でも助けることができますか?私は予想通りtop_nとrのオーダー

n=10 

df = data.frame(ref=sample(letters,n),score=rnorm(n)) 

require(dplyr) 

print(dplyr::top_n(df,5,score)) 

print(df[order(df$score,decreasing = T)[1:5],]) 

top_nからの出力は、スコアに従って順序付けされていません。両方の出力が同じであるが、top_n私が読んだ文書はまた、例えば、top_n結果は指定した列で発注する必要があり意味

https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf

 
ref  score 
1 i 0.71556494 
2 p 0.04463846 
3 v 0.37290990 
4 g 1.53206194 
5 f 0.86307107 
    ref  score 
7 g 1.53206194 
10 f 0.86307107 
1 i 0.71556494 
6 v 0.37290990 
4 p 0.04463846 

+1

実際にはresutは同じですが、 'top_n'では5行が元の順序で残ります。試してください: 'df%>%top_n(5)%>%arrange(desc(score))' – agenis

+0

確かに。 'top_n'は' filter(x、min_rank(desc(wt))<= n) 'と同じですが、行の順序付けは行われません。 – Axeman

+0

@Axeman私はドキュメントが発注を示唆していると思います。質問にリンクされているチートシートには、「トップnのエントリを選択して注文する」と記載されています。 '?dplyr :: top_n'と入力すると、 が返されます。top_n {dplyr} \t Rドキュメント 値の上位n行を選択します。 説明 これは、filterおよびmin_rankを使用して、各グループの上位n個のエントリをwtで順序付けするのに便利なラッパーです。 –

答えて

0

私の誤解と期待は、質問にリンクされ、コメントに記載されたドキュメントを読んだことによるものです。いくつかの文書請求にもかかわらず、top_nwtで注文された出力を生成しません。

0

order機能を使用して比較行を並べ替えることはありません。

あなたがdf[order(df$score,decreasing = F)[1:5],]top_n(df, -5, score) %>% arrange(score)に相当し、順序を周りフリッピングarrange()

top_n(df, 5, score) %>% arrange(desc(score)) 

使用df[order(df$score,decreasing = T)[1:5],]と同じ結果を得ることができます。

関連する問題