Rank variable by group (dplyr)

后端 未结 2 653
死守一世寂寞
死守一世寂寞 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:09

    For future readers, the rank by group variable can be achieved using base R. Per the OP's iris data example to rank according to Sepal.Length:

    # ORDER BY SPECIES AND SEPAL.LENGTH
    iris <- iris[with(iris, order(Species, Sepal.Length)), ]
    
    # RUN A ROW COUNT FOR RANK BY SPECIES GROUP
    iris$rank <- sapply(1:nrow(iris), 
                        function(i) sum(iris[1:i, c('Species')]==iris$Species[i]))
    
    # FILTER DATA FRAME BY TOP 3
    iris <- iris[iris$rank <= 3,]
    
    0 讨论(0)
  • 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
    
    0 讨论(0)
提交回复
热议问题