如何通过tidyverse移除数据框列名开头的数字?
批量移除列名开头的编号,高效合并调查数据集
你可以通过正则表达式批量处理列名替代手动rename()的重复操作,以下是两种高效实现方式:
方法1:dplyr + stringr 管道风格(推荐,可读性高)
先加载必要的包,再用rename_with()配合正则批量移除列名开头的数字. 前缀:
library(dplyr) library(stringr) # 处理df1:对ID、Year之外的列批量清理前缀 df1_clean <- df1 %>% rename_with(~ str_remove(., "^\\d+\\.\\s+"), -c(ID, Year)) # 处理df2:逻辑完全一致,无需手动对应编号 df2_clean <- df2 %>% rename_with(~ str_remove(., "^\\d+\\.\\s+"), -c(ID, Year)) # 合并数据集 end_df <- bind_rows(df1_clean, df2_clean)
方法2:Base R 极简写法(无需额外包)
直接用gsub()修改列名,由于ID、Year的列名不会匹配目标正则模式,可直接全局替换:
# 处理df1 colnames(df1) <- gsub("^\\d+\\.\\s+", "", colnames(df1)) # 处理df2 colnames(df2) <- gsub("^\\d+\\.\\s+", "", colnames(df2)) # 合并数据集 end_df <- rbind(df1, df2)
关键说明
- 正则表达式
^\\d+\\.\\s+的含义:^:匹配字符串开头\\d+:匹配1个或多个数字\\.:匹配点号(需转义)\\s+:匹配1个或多个空格
- 如果列名编号格式有变化(比如用
数字-代替数字.),只需调整正则表达式即可,例如改成^\\d+-\\s+。
内容的提问来源于stack exchange,提问作者Rhys Maredudd Davies
相关产品推荐
相关产品推荐

