You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:25:19