当前位置: 首页 > news >正文

RNA-seq分析之基因ID转换

跑了生信项目这么久,还是得做一下总结,将常用的代码记录保存一下,以免电脑坏了又没备份,代码在确保运转稳定后使用AI进行补充和完善,适合立马使用

# 1. 基础设置
setwd("G:/aml")  # 替换为你的实际路径
rm(list = ls())  # 清空环境变量# 2. 安装并加载必需的R包
if (!require("BiocManager", quietly = TRUE)) {install.packages("BiocManager")
}# 安装依赖包
packages <- c("AnnotationDbi", "org.Hs.eg.db", "dplyr", "tidyr")
for (pkg in packages) {if (!require(pkg, quietly = TRUE, character.only = TRUE)) {if (pkg %in% c("AnnotationDbi", "org.Hs.eg.db")) {BiocManager::install(pkg, update = FALSE)} else {install.packages(pkg)}}
}# 加载包
library(AnnotationDbi)
library(org.Hs.eg.db)
library(dplyr)
library(tidyr)# 3. 读取原始表达数据
dat <- read.table(file = "AML.txt",  # 基因表达矩阵文件header = TRUE,        # 第一行为列名sep = "\t",           # 制表符分隔check.names = FALSE,  # 保留原始列名格式stringsAsFactors = FALSE
)
#可供转换的基因名字
keytypes(org.Hs.eg.db)# 查看数据基本信息
cat("原始数据维度:", dim(dat), "\n")
head(dat[, 1:3])# 4. 基因注释(Entrez ID转基因符号)
# 提取Entrez ID
entrez_ids <- as.character(dat$GeneID)# 注释基因(获取SYMBOL、GENENAME)
annot_result <- AnnotationDbi::select(x = org.Hs.eg.db,keys = entrez_ids,columns = c("SYMBOL", "GENENAME", "ENTREZID"),keytype = "ENTREZID"
)# 查看注释结果
cat("\n注释结果维度:", dim(annot_result), "\n")
head(annot_result)# 5. 注释结果去重
annot_unique <- annot_result %>%distinct(ENTREZID, .keep_all = TRUE)  # 按Entrez ID去重cat("\n去重后注释行数:", nrow(annot_unique), "\n")# 6. 合并注释到原始数据并清理
# 转换为字符型确保匹配
dat$GeneID <- as.character(dat$GeneID)
annot_unique$ENTREZID <- as.character(annot_unique$ENTREZID)# 合并注释信息
dat_annotated <- left_join(x = dat,y = annot_unique[, c("ENTREZID", "SYMBOL", "GENENAME")],by = c("GeneID" = "ENTREZID")
)# 调整列顺序并删除冗余列
dat_clean <- dat_annotated %>%select(SYMBOL, GENENAME, everything()) %>%  # 注释列放前面select(-GeneID) %>%  # 移除原始ID列filter(!is.na(SYMBOL))  # 保留有基因符号的行cat("\n清理后数据维度:", dim(dat_clean), "\n")# 7. 按基因符号合并重复基因(取均值,NA用0代替)
sample_cols <- setdiff(colnames(dat_clean), c("SYMBOL", "GENENAME"))  # 样本列名dat_merged <- dat_clean %>%group_by(SYMBOL) %>%summarise(GENENAME = first(na.omit(GENENAME)),  # 保留基因名across(all_of(sample_cols), ~mean(.x, na.rm = TRUE)),  # 样本列取均值.groups = "drop") %>%mutate(across(all_of(sample_cols), ~replace_na(.x, 0)))  # NA替换为0cat("\n合并后数据维度:", dim(dat_merged), "\n")dat_merged<-as.data.frame(dat_merged)# 8. 保存最终结果
rownames(dat_merged) <- dat_merged$SYMBOL  # 基因符号设为行名
dat_final <- select(dat_merged, -SYMBOL)#移除重复的基因列
dat_final <- select(dat_final, -GENENAME)write.table(x = dat_final,file = "count_Matrix_annotated.txt",sep = "\t",row.names = TRUE,col.names = TRUE,quote = FALSE,na = ""
)# 最终验证
cat("\n最终矩阵维度:", dim(dat_final), "\n")
cat("结果保存路径:", file.path(getwd(), "count_Matrix_annotated.txt"), "\n")
head(dat_final[, 1:3])

http://www.dtcms.com/a/391958.html

相关文章:

  • [视图功能9] 图表联动与多维度分析:打造协同动态的数据洞察仪表盘
  • Python基础 6》数据类型_列表(List)
  • 40、大模型工程平台全景对比 - 技术选型指南
  • BEVformer训练nusenes-mini数据集
  • 《Unity3D NavMeshAgent与Rigidbody移动同步问题的技术拆解》
  • Psy Protocol 技术核心解读
  • PS练习3:使用变形将图片放到实际场景中
  • 在排序数组中查找元素的第一个和最后一个位置
  • 一条命令在ubuntu安装vscode
  • 【开题答辩全过程】以 ASP.NET抗疫物资管理系统为例,包含答辩的问题和答案
  • 探饭 - 字节跳动推出的AI美食推荐助手
  • ZCC5515_耐压9.5V ,超低静态功耗5uA,完全替代CS5515
  • 端脑云AI生图体验:从提示词到精美肖像
  • 临界处有一条看不见的河
  • JavaWeb--day8-- Mybatis(正式)
  • 基于WSL BES2710编译环境搭建方法
  • 模块化设计逻辑:太阳镜气流单元 / 耳机可拆卸结构的装配精度与兼容性分析
  • 半监督学习实战:如何用少量标注数据获得媲美全监督学习的性能?
  • 作业3(初学CSS)
  • CSS基础(总结)
  • 【信创云架构 PACS系统】全网首发-基于JDK17+Vue3全新开发的信创国产化系统
  • 若依vue项目里面,使用到oss,这个 是什么
  • Linux中的Ubuntu系统安装配置 MATLAB 开发环境、离线安装非root安装vscode
  • 网站单页应用(SPA)和多页应用(MPA)的区别
  • 10cm钢板矫平机:一副“钢铁脊椎”的矫正日记
  • Nano Banana (Gemini 2.5 Flash Image) 完整体验教程:一键生成你的专属 3D AI 手办
  • Qt水平布局:深入解析与优化技巧
  • 【vLLM 学习】Multilora Inference
  • 【硬件-笔试面试题-102】硬件/电子工程师,笔试面试题(知识点:RC滤波器的参数怎么计算)
  • 整体设计 语言拼凑/逻辑拆解/词典缝合 之 2 逻辑拆解(“你”) 决定逻辑描述列项的非真“自由”:自由选择/自由创新/自由意志(豆包助手)