R语言read.table()读取基因表达文件时出现rownames(基因名)重复,可能是因为excel篡改了基因名为日期

问题

我参考了这篇文章处理了我的RNA-seq数据,导出了.csv文件。https://zhuanlan.zhihu.com/p/359012216
然后我想用CIBERSORT做免疫浸润分析,于是将该基因表达文件导出为.txt,但是在我使用CIBERSORT.R时,一直报错:

source('Cibersort.R')
LM22.file <- "LM22.txt"
TCGA_exp.file <- "DATA.txt" 
TCGA_TME.results <- CIBERSORT(LM22.file ,TCGA_exp.file, perm = 50, QN = F)

一直报错:'row.names'里不能有重复的名字

寻找原因

我在R中使用debug,发现问题不出现在LM22.txt,即LM22.file这个表格的rownames是没有重复没有问题的,问题出现在我的基因表达矩阵里,出于便捷,我直接在excel中寻找第一列的重复值,没有检索到重复值。(这里我居然相信了可恶的excel,于是我重新debug,网上找了好多办法和代码,走了很多弯路…)
别的道路走不通,于是我重新寻找这个重复的列名,借助chatGPT写了段寻找重复列名的代码(顺便把检查空值的代码也写了,感谢ai):

#导入RNA-seq.txt文件
setwd("C:\\Users\\...\\")#此处...省略文件路径
TCGA_exp.file <- "DATA.txt"
data <- read.table(TCGA_exp.file, header = TRUE, sep = "\t", stringsAsFactors = FALSE, check.names = F)
# 提取第一列(行名)
rownames_column <- data[, 1]

# 检查重复值
duplicated_rows <- any(duplicated(rownames_column))
if (duplicated_rows) {
  cat("存在重复的行名。\n")
  # 打印重复的行名
  duplicated_values <- rownames_column[duplicated(rownames_column)]
  print(duplicated_values)
  # 使用which函数找到特定行名的行数
  row_numbers <- which(rownames_column == duplicated_values)
  # 输出行数,好像只能报出其中一个行数,但也够我看看是何方神圣阻挡我取经的道路!
  print(row_number)
} else {
  cat("没有重复的行名。\n")
}

# 检查空值
empty_rows <- any(rownames_column == "")
if (empty_rows) {
  cat("存在空的行名。\n")
  # 打印空值的行索引
  empty_row_indices <- which(rownames_column == "")
  print(empty_row_indices)
} else {
  cat("没有空的行名。\n")
}

找到了,是这个家伙!

1-Mar是什么鬼!

我打开excel,额…发现是日期😓 (我真的会谢!

在这里插入图片描述
在这里插入图片描述

解决方案

1、检索了很多方式,这篇文章写的蛮全面的,大伙可以参考学习学习:
https://blog.csdn.net/m0_72224305/article/details/130785362

2、chat-gpt老师也提供了一个方案:

要在导出为Excel文件时避免基因名称被篡改,可以在导出之前使用R语言对基因名称进行处理。以下是一个示例代码,展示了如何在导出数据时避免基因名称被篡改:
1.假设您的RNA-seq数据存储在一个名为“RNA_data”的数据框中。
2.在导出数据之前,使用gsub函数替换所有可能引起混淆的基因名称。以下是一个示例,用于替换所有包含“Mar”的基因名称。
3.导出修复后的数据到Excel文件。

# 替换包含"Mar"的基因名称
RNA_data$Gene.Symbol <- gsub("Mar", "MARC", RNA_data$Gene.Symbol)
# 导出数据到Excel文件
write.xlsx(RNA_data, "RNA_data_fixed.xlsx", sheet_name = "Sheet1", append = FALSE)

3、我没有试上述的方案,我选择直接避免使用excel~

write.table(TCGA_gset, "C:\\Users\\...\\TCGA_HNSC_fpkmdata_log2+1.txt", sep ="\t", quote =FALSE)
#sep:分隔符,默认为空格(” “),也就是以空格为分割列
#quote:字符串是否使用引号表示,默认为TRUE,也就是使用引号表示
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值