How to rank the data by a variable value and create a order variable?

How to rank variable and create a new variable to display the order? for example, following data frame, want to sort the data by var1 and generate a new variable for the order, let ties have the same order number. Thank you!

input<-("var1 var2
1 2
3 4
1 3
2 5
2 6
4 5
6 7")

mydata<- read.table(textConnection(input),header=T)

Here are a couple approaches using functions from dplyr depending on how you want the ranking to be numbered

library(tidyverse)

input <- ("var1 var2
1 2
3 4
1 3
2 5
2 6
4 5
6 7")

mydata <- read.table(textConnection(input), header = T)

# ties get lower number rank
mydata %>%
  mutate(rank_order = min_rank(var1)) %>%
  arrange(rank_order)
#>   var1 var2 rank_order
#> 1    1    2          1
#> 2    1    3          1
#> 3    2    5          3
#> 4    2    6          3
#> 5    3    4          5
#> 6    4    5          6
#> 7    6    7          7

# same as above but no gaps between ranks
mydata %>%
  mutate(rank_order = dense_rank(var1)) %>%
  arrange(rank_order)
#>   var1 var2 rank_order
#> 1    1    2          1
#> 2    1    3          1
#> 3    2    5          2
#> 4    2    6          2
#> 5    3    4          3
#> 6    4    5          4
#> 7    6    7          5

Created on 2018-11-20 by the reprex package (v0.2.1)

3 Likes

Thank you! one more question: if there are missing value in the rank variable and want to let missing value in the last, how to do that?

1 Like

Glad to help!

If there is NA in the ranking variable, you will get NA in the rank order column. Is that how you want NAs to be handled?

library(tidyverse)

# with NA
mydata2 <- tribble(
  ~var1, ~var2,
  1, 2,
  3, 4,
  NA, 3,
  2, 5,
  2, 6,
  4, 5,
  6, 7
)

# ties get lower number rank
mydata2 %>%
  mutate(rank_order = min_rank(var1)) %>%
  arrange(rank_order)
#> # A tibble: 7 x 3
#>    var1  var2 rank_order
#>   <dbl> <dbl>      <int>
#> 1     1     2          1
#> 2     2     5          2
#> 3     2     6          2
#> 4     3     4          4
#> 5     4     5          5
#> 6     6     7          6
#> 7    NA     3         NA

Created on 2018-11-20 by the reprex package (v0.2.1)

1 Like

Thank you so much!!!!!!!!!!!!!!!!!!!!!!!!!!1

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.