r - 在 R 中的数据框中添加多个排名列

标签 r ranking

我有以下df:

id city uf home money work
34  LA  RJ  10     2     2   
33  BA  TY  7      3     65
32  NY  BN  4      5     4
12  SP  SD  3      9     7
14  FR  DE  1      8     9
17  BL  DE  5      10    8

想要的 DF:

id city uf home  rank_home  money    rank_money   work   rank_work
34  LA  RJ  10    1          2         6           2       6
33  BA  TY  7     2          3         5           65      1
32  NY  BN  4     4          5         4           4       5
12  SP  SD  3     5          9         2           7       4
14  FR  DE  1     6          8         3           9       2
17  BL  DE  5     3          10        1           8       3

我知道这是可能的: dat$rank_home <- rank(dat$home)

但我想要一个更清晰的多列代码!

谢谢!!

最佳答案

我们可以循环 across 'home' 到 'work' 列,应用 rank , 同时通过在 .names 中添加前缀来创建新列, 可能是 select保持秩序

library(dplyr)
df1 <- df %>% 
   mutate(across(home:work, ~ rank(-.), .names = "rank_{.col}"))

或者可以在循环中执行此操作,通过指定 .after 将列放置在特定位置更灵活。或 .before .请注意,我们使用复合赋值运算符(%<>% 来自 magrittr)来进行原地赋值

library(magrittr)
library(stringr)
for(nm in names(df)[4:6]) df %<>%
     mutate(!!str_c("rank_", nm) := rank(-.data[[nm]]), .after = all_of(nm))

-输出

df
  id city uf home rank_home money rank_money work rank_work
1 34   LA RJ   10         1     2          6    2         6
2 33   BA TY    7         2     3          5   65         1
3 32   NY BN    4         4     5          4    4         5
4 12   SP SD    3         5     9          2    7         4
5 14   FR DE    1         6     8          3    9         2
6 17   BL DE    5         3    10          1    8         3

注意:如果列有关联,则默认使用方法是 "average" .所以,ties.method也可以是 rank 中的参数哪里有关系。

数据

df <- structure(list(id = c(34L, 33L, 32L, 12L, 14L, 17L), city = c("LA", 
"BA", "NY", "SP", "FR", "BL"), uf = c("RJ", "TY", "BN", "SD", 
"DE", "DE"), home = c(10L, 7L, 4L, 3L, 1L, 5L), money = c(2L, 
3L, 5L, 9L, 8L, 10L), work = c(2L, 65L, 4L, 7L, 9L, 8L)), 
class = "data.frame", row.names = c(NA, 
-6L))

关于r - 在 R 中的数据框中添加多个排名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68185316/

相关文章:

mysql - 复杂的mysql排名!

r - 一种快速计算所有点之间距离的方法

R Studio - 由于空提交消息而中止提交 - 使用 blogdown 部署时

r - 基于列的分组创建数据帧子集的向量

arrays - F#中的排名函数

r - 根据多个条件选择单行

r - 从重叠日期计算活跃天/月

r - 如何根据经纬度列表从栅格堆栈中提取数据?

PHP/MySQL 根据推荐计数对用户进行排名并选择一条记录