2016-07-22 3 views
1

mtcarsデータセットで次のクエリを実行すると、結果が下がります。Dplyr:グループ内で要約、変異、ランク付け

mtcars %>% 
    group_by(cyl,gear) %>% 
    summarise(total_cnt = n(), totalwt = sum(wt)) %>% 
    arrange(cyl, gear, desc(total_cnt), desc(totalwt)) %>% 
    mutate(rank = dense_rank(desc(total_cnt))) %>% 
    arrange(rank) 

cyl gear total totalwt rank 
    <dbl> <dbl> <int> <dbl> <int> 
1  4  4  8 19.025  1 
2  6  4  4 12.375  1 
3  8  3 12 49.249  1 
4  4  5  2 3.653  2 
5  6  3  2 6.675  2 
6  8  5  2 6.740  2 
7  4  3  1 2.465  3 
8  6  5  1 2.770  3 

今(ランク)各グループ内で、私はサブtotalwtに基づいて観測をランク付けしたいので、最終的な出力が(各ランクグループ内totalwtのDESC順)のようになります

cyl gear total_cnt totalwt rank subrank 
    <dbl> <dbl>  <int> <dbl> <int> <int> 
1  4  4   8 19.025  1 2 
2  6  4   4 12.375  1 3 
3  8  3  12 49.249  1 1 
4  4  5   2 3.653  2 3 
5  6  3   2 6.675  2 2 
6  8  5   2 6.740  2 1 
7  4  3   1 2.465  3 2 
8  6  5   1 2.770  3 1 

「mtcars1」はOPのコードから出力された場合

cyl gear total_cnt totalwt rank subrank 
    <dbl> <dbl>  <int> <dbl> <int> <int> 
3  8  3  12 49.249  1 1 
6  8  5   2 6.740  2 1 
8  6  5   1 2.770  3 1 

答えて

3

、我々はrankを使用することができます:サブランク= 1、そう、出力は次のようになり、各ランクはどこその後、最終的には1トップそして、 'ランク'

mtcars2 <- mtcars1 %>% 
       group_by(rank) %>% 
       mutate(subrank = rank(-totalwt)) 
mtcars2 
# cyl gear total_cnt totalwt rank subrank 
# <dbl> <dbl>  <int> <dbl> <int> <dbl> 
#1  4  4   8 19.025  1  2 
#2  6  4   4 12.375  1  3 
#3  8  3  12 49.249  1  1 
#4  4  5   2 3.653  2  3 
#5  6  3   2 6.675  2  2 
#6  8  5   2 6.740  2  1 
#7  4  3   1 2.465  3  2 
#8  6  5   1 2.770  3  1 

によってグループ化した後、 'subrank' を作成、我々は 'subrankが' 1つの

mtcars2 %>% 
     filter(subrank ==1) 
# cyl gear total_cnt totalwt rank subrank 
# <dbl> <dbl>  <int> <dbl> <int> <dbl> 
#1  8  3  12 49.249  1  1 
#2  8  5   2 6.740  2  1 
#3  6  5   1 2.770  3  1 
+1

おかげでたくさんある行をfilter、それが動作します –

関連する問題