'Get rank for every column using dplyr

I'm trying to get a rank for every column in a dataframe.

Ideal output (using mtcars as an example) would be as below but with the rank filled in for each column:

                   mpg cyl  disp  hp drat    wt  qsec vs am gear carb mpg_rank cyl_rank disp_rank ...
Mazda RX4         21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
....

I can produce a rank for each column, but I can't get the output in the above format... that's where I'm struggling.

cols <- colnames(mtcars)

get_rank <- function(col){
  
  df %>% mutate(rank=rank(.data[[col]]))
}

lapply(cols, get_rank)


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source