2017-05-22 9 views
0

です。私はdplyrのドキュメントを読んでいて、まだgroup_byメソッドをよく理解できませんでした。私は、各加盟店(merchant_id)が販売する上位3製品(product_id)を探しています。私が試したコードは各ショップのトップn製品はR

tmp <- orders %>% 
     group_by(product_id, merchant_id) %>% 
     summarize(count = n()) %>% 
     top_n(3, wt = count) %>% 
     arrange(desc(count)) 

次商人は、私は彼らが製品の対応する番号を表示したいと思い、以下の3つのユニークな製品を販売しているべきました。私は各製品の上位3製品を検索した場合

INPUT

order_id | product_id | merchant_id | 
---------|------------|-------------| 
23409 | 131883 | 597  | 
23683 | 131885 | 597  | 
25325 | 131885 | 597  | 
25390 | 131885 | 597  | 
25410 | 131888 | 597  | 
25325 | 223783 | 613  | 
28932 | 223815 | 613  | 
38197 | 298483 | 613  | 
48728 | 298483 | 613  | 

、私は多くの行を作成する必要があるため、出力は(なる例では一致していない数字を数えることを期待するが、形式)のような少しだけ、あなたのコードを変更する

OUTPUT

count | product_id | merchant_id | 
---------|------------|-------------| 
    5 | 131883 | 597  | 
    3 | 131885 | 597  | 
    2 | 131888 | 597  | 
    4 | 223783 | 613  | 
    2 | 223815 | 613  | 
    1 | 298483 | 613  | 
+1

再現可能な例を入力してください –

答えて

1

あなたの必要になります。 merchant_idでグループ化されたデータでtop_nを実行し、(product_id, merchant_id)でグループ化されたデータではなく、再度グループ化する前にグループ化する必要があります。 さらにarrangeでグループ内のカウントをmerchant_idにソートする場合は、それも指定する必要があります。

orders %>% 
group_by(product_id, merchant_id) %>% 
summarize(count = n()) %>% 
ungroup() %>% 
group_by(merchant_id) %>% 
top_n(3, wt = count) %>% 
arrange(merchant_id,desc(count)) 

これが返されます。

product_id merchant_id count 
     <int>  <int> <int> 
1  131885   597  3 
2  131883   597  1 
3  131888   597  1 
4  298483   613  2 
5  223783   613  1 
6  223815   613  1 

をまた、絆がある場合は、top_nは、n個の値以上のものを返すことができることに注意してください。

関連する問題