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

R语言按列号提取数据框列名时重复列名带.1后缀的原因

问题原因

该现象是R数据框的强制列名唯一机制触发导致的,和写法逻辑错误直接相关:

  • R中data.frame对象不允许存在重复列名,当使用带重复值的索引子集数据框列时,R会自动调用make.unique()处理重名:第一次出现的列名保留原名,后续重复出现的同名列会被依次追加.1、.2后缀,保证子数据框列名唯一。
  • 你的代码中df[doi$colum]这一步传入的列索引为c(3,5,4,7,2,2,1),其中列索引2重复出现2次。子集过程中第一个匹配到的列2(列名Apple)保留原名,第二个重复的列2被自动重命名为Apple.1,后续你通过colnames()取这个子数据框的列名,拿到的自然是带后缀的修改后结果。

本质问题:你仅需要按位置提取列名,完全不需要先子集整个数据框。colnames(df)本身是存储所有原始列名的字符向量,直接对向量做位置索引不会触发任何重命名逻辑。

修正方案

直接对列名字符向量做位置索引即可,不会出现自动追加后缀的问题,代码如下:

data.frame(
  Index = df[doi$row, 1],
  Fruits = colnames(df)[doi$colum]
)

运行后Fruits列会正确返回所有位置对应的原始列名,重复位置也会正确输出Apple而非Apple.1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:03:24