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

R语言:为DataFrame数字名称变量添加前缀重命名问题解决

解决数字开头列名添加前缀的问题

问题根源

你碰到的问题是:rename_if里传给匿名函数的.,对于数字开头的非标准列名,会以带引号的表达式形式传递,而不是纯字符串,所以拼接后才会出现ben'2021'这种带引号的列名。

推荐解决方案

用rename_with替代rename_if更合适,它直接操作列名的字符串值,写法简洁且符合需求:

library(dplyr)

# 先创建原始DataFrame
country <- c("country","US","France")
var1  <- c(234234,234234,1233124)
var2  <- c(34534,25674,123124)

df <- data.frame(country,var1,var2) %>% rename('2021' = var1,'2022' = var2)

# 执行重命名
df_clean <- df %>%
  rename_with(~paste0("ben", .), starts_with("20"))

运行后列名会变成country、ben2021、ben2022,完全满足你的要求。

原理说明

  • rename_with的第一个参数是处理列名的函数,这里的.直接拿到列名的字符串(比如"2021"),拼接前缀后自然不会带引号。
  • starts_with("20")用来筛选需要修改的列,和你原本的逻辑保持一致。

若坚持用rename_if的写法(不推荐)

要是一定要用rename_if,得先把表达式形式的列名转成字符串再处理,写法会繁琐些:

df_clean <- df %>%
  rename_if(startsWith(names(.),"20"), ~paste0("ben", as.character(rlang::get_expr(.))))

这个方法通过rlang::get_expr提取列名的字符串值,再拼接前缀,但显然rename_with是更优的选择。

内容的提问来源于stack exchange,提问作者Andre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:45:45