R语言修改dataframe中q03b_开头列名,将后缀数字加1并调整格式
解决方案
你可以直接一步完成所有列名修改,不需要拆分两个rename步骤,核心逻辑是提取列名末尾的数字转为数值加1后再拼接新的列名即可,不需要纠结tidy evaluation规则,因为rename系列函数中作用于列名的自定义函数是直接处理字符串,和列值的求值逻辑无关。
依赖包
需要提前加载tidyverse套件(包含dplyr和stringr):
library(tidyverse)
一步到位实现代码
# 测试数据构造 df <- tibble( ID = 1, q03b_0 = "a", q03b_1 = "b", q03b_2 = "c", q03b_14 = "m" ) # 核心重命名代码 df <- df %>% rename_with( .fn = ~ paste0("q03_other_", as.numeric(str_extract(., "\\d+$")) + 1), .cols = matches("^q03b_") )
执行后列名会直接从q03b_0/q03b_1/q03b_14转换为q03_other_1/q03_other_2/q03_other_15,完全符合需求。
基于你当前已生成q03_other_*列的修改方案
如果你已经完成了第一步替换,只想修改末尾数字,用以下代码即可:
df <- df %>% rename_with( .fn = ~ paste0("q03_other_", as.numeric(str_extract(., "\\d+$")) + 1), .cols = matches("^q03_other_") )
内容的提问来源于stack exchange,提问作者Juan C
相关产品推荐
相关产品推荐

