gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:43:55 24 4
gpt4 key购买 nike

我有以下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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com