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

如何在R中修改除前两列外的列名?

解决R中修改数据框列名时保留前两列的问题

我明白你的需求——想给数据框里除了前两列之外的所有列名加上x_前缀,但又不想改动前两列的原有名称。你之前用colnames(df) <- paste("x", colnames(df), sep = "_")会修改所有列名,确实不是你要的效果,下面给你两种简单可行的解决方案:

基础R解决方案

直接针对第三列到最后一列的列名进行修改,完全不碰前两列:

首先先确认你的数据框创建代码(和你提供的一致):

x <- c("A", "B", "C")
x2 <- c( "D", "E", "F")
ch <- c("G", "H", "I")
ch2 <- c("J", "K", "L")
ch3 <- c("M", "N", "O")
df <- data.frame(x, x2, ch, ch2, ch3)

然后执行修改列名的代码:

# 选中第3列到最后一列,添加x_前缀
colnames(df)[3:ncol(df)] <- paste0("x_", colnames(df)[3:ncol(df)])

执行后查看数据框,就能得到你想要的结果:

x x2 x_ch x_ch2 x_ch3
1 A  D   x_G  x_J  x_M
2 B  E   x_H  x_K  x_N
3 C  F   x_I  x_L  x_O

这里的核心是colnames(df)[3:ncol(df)]——它精准选中了从第三列到最后一列的列名,只对这部分进行前缀添加操作,前两列的名称完全保留。

tidyverse(dplyr)解决方案

如果你平时习惯用tidyverse工具包,dplyr里的rename_with函数可以更直观地实现这个需求:

library(dplyr)

df <- df %>%
  # 给除了x和x2之外的列名添加x_前缀
  rename_with(~paste0("x_", .x), -c(x, x2))

这个写法的优势是可读性更强:-c(x, x2)明确指定了要排除的列,~paste0("x_", .x)则是对剩下的列名执行添加前缀的操作,效果和基础R的方法完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:30:54