Rank variable by group (dplyr)

后端 未结 2 655
死守一世寂寞
死守一世寂寞 2020-12-13 19:24

I have a dataframe with columns x1, x2, group and I would like to generate a new dataframe with an extra column rank that indicates the order of

2条回答
  •  时光取名叫无心
    2020-12-13 20:22

    The following produces the desired result as was specified.

    library(dplyr)
    
    by_species <- iris %>% arrange(Species, Sepal.Length) %>%
        group_by(Species) %>% 
        mutate(rank = rank(Sepal.Length, ties.method = "first"))
    
    by_species %>% filter(rank <= 3)
    ##Source: local data frame [9 x 6]
    ##Groups: Species [3]
    ##
    ##  Sepal.Length Sepal.Width Petal.Length Petal.Width    Species  rank
    ##         (dbl)       (dbl)        (dbl)       (dbl)     (fctr) (int)
    ##1          4.3         3.0          1.1         0.1     setosa     1
    ##2          4.4         2.9          1.4         0.2     setosa     2
    ##3          4.4         3.0          1.3         0.2     setosa     3
    ##4          4.9         2.4          3.3         1.0 versicolor     1
    ##5          5.0         2.0          3.5         1.0 versicolor     2
    ##6          5.0         2.3          3.3         1.0 versicolor     3
    ##7          4.9         2.5          4.5         1.7  virginica     1
    ##8          5.6         2.8          4.9         2.0  virginica     2
    ##9          5.7         2.5          5.0         2.0  virginica     3
    
    by_species %>% slice(1:3)
    ##Source: local data frame [9 x 6]
    ##Groups: Species [3]
    ##
    ##  Sepal.Length Sepal.Width Petal.Length Petal.Width    Species  rank
    ##         (dbl)       (dbl)        (dbl)       (dbl)     (fctr) (int)
    ##1          4.3         3.0          1.1         0.1     setosa     1
    ##2          4.4         2.9          1.4         0.2     setosa     2
    ##3          4.4         3.0          1.3         0.2     setosa     3
    ##4          4.9         2.4          3.3         1.0 versicolor     1
    ##5          5.0         2.0          3.5         1.0 versicolor     2
    ##6          5.0         2.3          3.3         1.0 versicolor     3
    ##7          4.9         2.5          4.5         1.7  virginica     1
    ##8          5.6         2.8          4.9         2.0  virginica     2
    ##9          5.7         2.5          5.0         2.0  virginica     3
    

提交回复
热议问题