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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:03:22