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

如何解决R语言使用read.csv读取CSV文件时报重复行名的错误

报错原因

你遇到的duplicate 'row.names' are not allowed报错核心原因是CSV文件第一列的gene_id存在重复值,你此前调整文件格式、删除空白字符的操作无法解决该类问题。

可行解决步骤

  • 第一步:先不指定行名读取文件,定位重复ID
    先读取完整文件不设置row.names参数,查询所有重复的gene_id:

    # 读取文件
    annotation_file <- "Best3_Abicinctus_FunctionalAnnotation.csv"
    annotation_info <- read.csv(annotation_file, header = T, stringsAsFactors = F)
    # 输出所有重复的gene_id
    dup_ids <- annotation_info$gene_id[duplicated(annotation_info$gene_id)]
    print(dup_ids)
    

    你可以根据输出的重复ID判断是上游注释结果有误,还是存在无效重复行。

  • 第二步:保留原行顺序的前提下设置行名,有两种可选方案:

    1. 给重复ID加唯一后缀,不删除任何行
      用make.names函数自动给重复ID加.1/.2后缀,全程不改变原文件的行顺序,原gene_id列也会完整保留不影响后续分析:
      rownames(annotation_info) <- make.names(annotation_info$gene_id, unique = T)
      # 若不需要保留gene_id列可执行以下代码删除,和你最初用row.names=1读取的结构完全一致
      # annotation_info <- annotation_info[, -1]
      
    2. 仅保留每个gene_id的第一条注释,删除重复行
      如果重复行属于无效数据,直接去重后设置行名,原行顺序保持不变:
      # 保留每个gene_id第一次出现的行
      annotation_info_unique <- annotation_info[!duplicated(annotation_info$gene_id), ]
      rownames(annotation_info_unique) <- annotation_info_unique$gene_id
      # 同上可按需删除第一列
      # annotation_info_unique <- annotation_info_unique[, -1]
      

以上两种方案都不需要设置row.names=NULL,完全不会打乱后续分析所需的数据顺序。

内容的提问来源于stack exchange,提问作者Rodriguez J Mathew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:45:03