【生信】R语言id转换两种方法(附代码)

代码都是直接给出来了
需要修改的地方我进行了标记
只要修改一下都能直接用

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

首先进入官网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——人类
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容