【生信】R语言进行id转换的方法(附可直接使用代码)

news2025/1/16 7:50:15

本文我都默认已经下载好了表达矩阵exp了哦
代码都是直接给出来了,需要修改的地方我进行了标记
一般只要修改一下都能直接用了

方法一:下载平台数据以得到对应信息

然后进入官网https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi,在这里我以GSE26682为例,点击红圈中的链接
在这里插入图片描述然后下载soft.gz文件(一般是下面一个)
在这里插入图片描述
首先在分析前需要加载几个必要的包,可以通过以下方法下载

if (!requireNamespace("BiocManager", quietly = TRUE)) { 
  install.packages("BiocManager",ask = F, update = F)
}

BiocManager::install("GEOquery")
BiocManager::install("limma")
BiocManager::install("affy") 

只有一个平台

gse <- getGEO("你的GSE序号", destdir = ".",
                getGPL = T,
                AnnotGPL = T) # 此处更改GSE序号

gse[[1]]

data <- read.csv("表达矩阵的地址") # 此处更改表达矩阵地址 

# 表达矩阵也可以通过这个方法获得
# exp <- exprs(gse[[1]])  

GPL <- getGEO(filename = "刚刚下载的soft.gz文件的地址") # 此处增加soft.gz文件地址

gpl <- GPL@gpls[[1]]@dataTable@table
data <- aggregate(.~ID_REF, data, mean) # 对数据进行去重,重复的取平均

colnames(gpl) 
ids <- gpl[, c(a, b)] # 此处将a和b更改为前面列出的列名中的id和gene symbol的位置
colnames(ids) <- c("ID_REF", "symbol") # 此处将列名与表达矩阵中的列名进行统一,不一定是ID_REF和symbol,需要按照对应的进行修改
re <- merge(data, ids, by.x = "ID_REF", by.y = "ID_REF") # 此处同理,不一定是ID_REF

re <- re[!apply(is.na(re) | re$symbol == "", 1, all), ] # 删除空白值
re <- na.omit(re) # 去除na值
re$symbol <- data.frame(sapply(re$symbol,
                                 function(x)unlist(strsplit(x, "///"))[1]),
                          stringsAsFactors = F)[, 1]
                          
write.csv(re, file = "给文件取个名.csv") # 保存文件

有两个平台

library(GEOquery)
library(limma)
library(affy)
library(dplyr)

gse <- getGEO("你的GSE序号", destdir = ".",
                getGPL = T,
                AnnotGPL = T) # 此处更改GSE序号

fdata_1 <- fData(gse[[1]])
fdata_2 <- fData(gse[[2]])

sampleNames_1 <- sampleNames(gse[[1]])
sampleNames_2 <- sampleNames(gse[[2]])

gene_1 <- fdata_1[, c("ID", "gene_symbol")] # 将fdata_1中的 “id”列和“gene_symbol”列进行提取,注意:可能叫ID_REF,不一定就叫“id”

gene_1$gene_symbol <- data.frame(sapply(gene_1$gene_symbol,
                                               function(x)unlist(strsplit(x, "//"))[1]),
                                        stringsAsFactors = F)[, 1]
gene_1 <- na.omit(gene_1)

gene_2$gene_symbol <- data.frame(sapply(gene_2$gene_symbol,
                                               function(x)unlist(strsplit(x, "//"))[1]),
                                        stringsAsFactors = F)[, 1]
                                      
fdata_2 <- na.omit(fdata_2)

gene_2 <- fdata_2[, c("ID", "gene_symbol")] # 将fdata_1中的 “id”列和“gene_symbol”列进行提取,注意:可能叫ID_REF,不一定就叫“id”

gene_1 <- gene_1[!apply(is.na(gene_1) | gene_1$gene_symbol == "", 1, all), ]
gene_2 <- gene_2[!apply(is.na(gene_2) | gene_2$gene_symbol == "", 1, all), ]

gene_total <- rbind(gene_1, gene_2)
index_gene_total <- duplicated(gene_total$ID)
gene_total <- gene_total[!index_gene_total, ] # 去重,只保留第一个

data <- read.csv("表达矩阵的地址")

# 表达矩阵也可以通过这个方法获得
# exp <- exprs(gse[[1]])  

colnames(gene_total) <- c("ID_REF", "gene_symbol") # 此处将列名与表达矩阵中的列名进行统一,不一定是ID_REF和symbol,需要按照对应的进行修改
re <- merge(data, gene_total, by.x = "ID_REF", by.y = "ID_REF")

write.csv(re_1, file = "给他取个名.csv")

注意事项

gene assignment 和 gene symbol的关系

有时候gene symbol会在gene assignment里面,需要我们自行进行提取,这时候我么可以利用这个结构(这个是需要自己理解一下代码基础用法的),只要改一下第二行最后方框里面的数字就可以提取“//”这个符号前面的还是后面的内容


gene_2$gene_symbol <- data.frame(sapply(gene_2$gene_symbol,
                                               function(x)unlist(strsplit(x, "//"))[1]),
                                        stringsAsFactors = F)[, 1]

gene symbol中存在空格的问题

可以用一下的参数进行更改列名(需要改一下名字等等)

names(fdata_2)[names(fdata_2) == "gene_assignment"] <- "gene_symbol"

使用bitr()函数

这是我在最开始学id转换时候用的最多的,因为它很方便,不用下载什么乱七八糟的文件,对于我家这个很烂的网络很有利,但是有个致命的缺点:不一定能对所有的id进行转换,也就是说存在一个“正确率”的问题,这样的话,最后得出的结论也就存在一定的误差,这样就不太符合科研工作者严谨的态度吧,所以不太建议使用!!!
只有在走投无路时候再使用!

加载包

library(clusterProfiler)
library(org.Hs.eg.db)

看一下这个R包里面提供哪几种数据类型的下载方式

keytypes(org.Hs.eg.db)

开始转换工作

ids = rownames(exp)
ids = as.data.frame(ids)
colnames(ids) = "ID" 

result <- bitr(ids$ID,  # 数据框
      fromType = "PMID",   # 你的ID的数据类型
      toType = c("SYMBOL","ENSEMBL"),  # 转化的数据类型
      OrgDb = org.Hs.eg.db)  # org.Hs.eg.db——人类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/142738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】4.4 数组

4.4.1 数组的定义 数组&#xff1a; 按照一定格式排列起来的&#xff0c;具有相同类型的数据元素的集合。 一维数组&#xff1a; 若线性表中的数据元素为非结构的简单元素&#xff0c;则称为一维数组。逻辑结构&#xff1a;线性结构&#xff0c;固定长度的线性表。声明格式…

如何学习微服务架构?(项目学习)

哪些项目适合使用微服务架构&#xff1f;对于一般的公司来说&#xff0c;微服务的实践有着很大的技术挑战&#xff0c;所以并不是所有的公司都适合将整体架构拆分成微服务架构。一般来说&#xff0c;微服务架构更适合于未来具有一定扩展复杂度、具有大量增量用户期望的应用&…

最新综述:基于语言模型提示学习的推理

©PaperWeekly 原创 作者 | OE-Heart引言推理能力是人类智能的核心能力之一。随着预训练技术的不断发展&#xff0c;大模型辅之以提示学习&#xff08;如 Chain-of-Thought Prompting [1]&#xff09;涌现出一系列的惊人的推理能力&#xff0c;引起了学术界、工业界学者的…

动态规划——数位dp

数位dp 文章目录数位dp概述题目特征基本原理计数技巧模板例题度的数量思路代码数字游戏思路代码不要62思路代码概述 数位是指把一个数字按照个、十、百、千等等一位一位地拆开&#xff0c;关注它每一位上的数字。如果拆的是十进制数&#xff0c;那么每一位数字都是 0~9&#xf…

unity 前向渲染 渲染阴影原理

下面情况默认是 前向渲染路径&#xff0c;场景中平行光开启了阴影方式原理备注ShadowMap把相机放到光源的位置&#xff0c;那么场景中该光源的阴影区域就是那些相机看不到的位置得到的是&#xff1a;场景中距离光源最近的表面位置&#xff08;深度信息&#xff09;unity中专门的…

一个基于SpringBoot+vue的学生信息管理系统详细设计

一个基于SpringBootvue的学生信息管理系统详细设计 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

【docker08】本地镜像发布到阿里云

本地镜像发布到阿里云流程 1.流程 2.镜像的生成方法 基于当前容器创建一个新的镜像&#xff0c;新功能增强命令&#xff1a; docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]] 3.将本地镜像推送到阿里云 3.1本地镜像素材原型 3.2阿里云开发者平台 进入阿里云找到控制台进…

Word控件Spire.Doc 【Table】教程(2):如何设置Word表格列宽

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

CV中一些常见的特征点

Harris、SIFT、SURF、ORB特征点总结本篇博客介绍一些常见的特征点。Brief描述子&#xff1a;编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;编辑切换为居…

基于JavaSpringboot+Vue实现前后端分离房屋租赁系统

基于JavaSpringbootVue实现前后端分离房屋租赁系统 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

已解决Python pandas.read_excel读取Excel文件报错

已解决&#xff08;Python pandas.read_excel读取Excel文件报错&#xff09;io ExcelFile(io&#xff0c;storage_optionsstorage.options, engineengine) 文章目录报错代码报错原因解决方法帮忙解决报错代码 粉丝群一个小伙伴想用pandas.read_excel读取Excel文件&#xff…

Linux文件管理---磁盘上文件如何管理(inode)

文章目录磁盘与文件的关系磁盘的逻辑结构与操作系统关系真实的磁盘逻辑结构一台计算机磁盘上的文件是非常多的&#xff0c;这些文件该如何进行管理&#xff1f;我们想打开某个磁盘上的文件究竟是如何找到该文件的&#xff1f;磁盘与文件的关系 这就是磁盘的物理模型和存储结构 …

Ubuntu20.04安装Mysql5.7

目录 1、下载安装包 2、解压 3、删除测试安装包 4、开始安装Mysql 4.1、如果碰到缺少依赖处理方法&#xff0c;没有碰到忽略即可 5、配置MySQL 5.1、查看mysql状态 5.2、设置root密码 1、下载安装包 wget https://cdn.mysql.com/archives/mysql-5.7/mysql-server_5.7.3…

操作系统死锁相关知识点介绍

死锁 死锁的定义 一组进程中&#xff0c;每个进程都无限等待被该组进程中另一进程所占有的资源&#xff0c;因而永远无法得到的资源&#xff0c;这种现象称为进程死锁&#xff0c;这一组进程就称为死锁进程。 如果死锁发生&#xff0c;会浪费大量系统资源&#xff0c;甚至导致…

【CSDN周赛】第21期第二题千问万问

题目描述&#xff1a; 给定大小为n的整数序列A. 现在会有q次询问&#xff0c;询问子区间的整数数量。 思路&#xff1a; 1、考的时候没做出来&#xff0c;但是感觉不难&#xff0c;一直不懂错在哪里&#xff0c;所以比赛结束后继续修改&#xff1b; 2、以下代码没有按调用函…

QTextDocument

一、描述 此类用来储存结构化的富文本文档。 二、类型成员 1、enum QTextDocument::FindFlag&#xff1a;此枚举描述查找函数可用的选项。这些选项可以用“|”组合&#xff1a; FindBackward&#xff1a;向后搜索。FindCaseSensitive&#xff1a;不区分大小写。FindWholeWo…

用户单点登录

一、用户身份认证 1、单一服务器模式 我们使用传统的Session贺Coookie的模式&#xff0c;就可以完成单一服务器的登录&#xff0c;会话跟踪技术&#xff0c; 一般过程如下&#xff1a; 用户向服务器发送用户名和密码。 验证服务器后&#xff0c;相关数据&#xff08;如用户名…

SpringBoot自定义动态定时任务(三十五)

二八佳人体似酥&#xff0c;腰间仗剑斩愚夫。虽然不见人头落&#xff0c;暗里教君骨髓枯。 上一章简单介绍了SpringBoot整合Quartz实现动态定时任务(三十四) ,如果没有看过,请观看上一章 通过 Quartz 实现了动态定时任务&#xff0c;还需要引入 Quartz 组件&#xff0c; 能不…

腾讯前端二面高频手写面试题总结

实现LRU淘汰算法 LRU 缓存算法是一个非常经典的算法&#xff0c;在很多面试中经常问道&#xff0c;不仅仅包括前端面试 LRU 英文全称是 Least Recently Used&#xff0c;英译过来就是” 最近最少使用 “的意思。LRU 是一种常用的页面置换算法&#xff0c;选择最近最久未使用的…

降本提效 | AIRIOT设备运维管理解决方案

传统运维多是使用在本地化系统&#xff0c;以人工运维和独立系统执行运维工作&#xff0c;重点关注的是设施运行&#xff0c;存在以下几个问题&#xff1a; 1、信息孤岛&#xff1a;本地化系统的接口不同&#xff0c;功能单一独立&#xff0c;各个系统之间的数据无法对接、交互…