在dplyr的select调用中同时实现多列选择与重命名可行吗?
解决方案:在单个
select()调用中完成选择与重命名 可以利用dplyr 1.0.0及以上版本的across()函数,在select()内部同时完成列选择和批量重命名,完全匹配你的需求:
library(dplyr) library(stringr) df1 %>% select( Location, across( starts_with("pct"), .names = "{str_replace(.col, 'pct_lessequal_4wks_', '')}" ) )
代码说明
Location:直接保留原列名选择该列across(starts_with("pct"), ...):批量选中所有以pct开头的列.names = "{str_replace(.col, 'pct_lessequal_4wks_', '')}":通过glue语法动态生成新列名,用str_replace移除指定前缀,仅保留后缀部分
运行后得到的结果列名是:Location, current, baseline, pre_mandate,完全符合预期。
备选方案:预构建命名向量
如果需要重复使用列名映射规则,可先构建「原列名-新列名」的命名向量,再通过all_of()传入select():
# 生成列名映射向量 pct_col_mapping <- starts_with("pct")(df1) %>% set_names(str_replace(., "pct_lessequal_4wks_", "")) # 一步完成选择与重命名 df1 %>% select(Location, all_of(pct_col_mapping))
内容的提问来源于stack exchange,提问作者PhDavey
相关产品推荐
相关产品推荐

