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
相关产品推荐
相关产品推荐

