R(dplyr)中如何拼接其他列的列名字符串重命名dataframe列
问题原因
原代码无法运行有两个核心问题:
dplyr::rename()等号左侧不支持直接写paste()这类动态生成字符串的表达式作为新列名,固定命名的语法无法处理动态拼接的场景colnames()函数需要传入数据对象作为入参,你写的colnames(2)、colnames(3)是错误用法,直接传位置索引无法获取对应列名
可行方案
方案1:用rename_with()(最推荐,语义最清晰)
rename_with()是dplyr专门为动态修改列名设计的函数,可以直接指定要修改的列位置,再传入生成新列名的逻辑:
library(dplyr) data %>% rename_with( .fn = ~ paste(colnames(data)[2], "-", .x), .cols = 3 )
运行后第三列会被重命名为Apr 22 - May 22,和需求完全一致。其中.x代表你选中的要修改的列(也就是第三列)的原列名。
方案2:用rename()搭配tidyverse动态编程语法
如果要沿用rename()的写法,需要用动态赋值运算符:=替代普通等号,再用!!把拼接好的列名注入到参数位置:
data %>% rename( !!paste(colnames(data)[2], "-", colnames(data)[3]) := 3 )
两种写法运行结果完全一致。
内容的提问来源于stack exchange,提问作者sa90210
相关产品推荐
相关产品推荐

