如何使用purrr::map_df()为生成的新变量添加rank后缀?
解决map_df生成变量名重复并添加后缀的问题
这里提供几种tidyverse风格的实用方案,帮你给生成的排名列添加_rank后缀:
方法1:用imap_df直接命名新列
imap_df可以同时获取列的名称和值,方便直接给新列指定带后缀的名称:
library(tidyverse) # 生成随机数据 dat <- tibble( x_1 = runif(10), x_2 = runif(10), x_3 = runif(10) ) # 生成带后缀的排名列并合并 rank_cols <- dat |> imap_df(~ rank(.x) |> set_names(str_c(.y, "_rank"))) dat <- bind_cols(dat, rank_cols)
方法2:先计算排名再批量重命名
先用map_df生成排名结果,再用rename_with批量修改列名:
rank_cols <- dat |> map_df(rank) |> rename_with(~ str_c(.x, "_rank")) dat <- bind_cols(dat, rank_cols)
方法3:用mutate + across(最简洁推荐)
直接在原数据框中添加新列,across的.names参数可以通过模板自动生成新列名:
dat <- dat |> mutate(across(everything(), rank, .names = "{.col}_rank"))
这里{.col}会自动替换为原列名称,最终生成x_1_rank、x_2_rank这类带后缀的列,无需额外合并步骤,更符合tidyverse的操作习惯。
内容的提问来源于stack exchange,提问作者LucaS
相关产品推荐
相关产品推荐

