R语言 pathway内gene id转化的

今天在处理爬下来各个通路数据库的数据时,发现各个通路的gene并不是gene symbol,而是gene id,这种情况可以利用bitr函数进行转换。

> library(tidyverse)
> library(dplyr)# %>% 功能需要调用这个包
> library(clusterProfiler)#bitr()需要调用的包
> library(org.Mm.eg.db)#小鼠的数据,我这里用的demodata是小鼠.其他物种
                       #需要安装对应的数据
data <- read.csv("TaxID_10090_pathway_No_Duplicates.csv",
                 sep = ",",
                 row.names = 1,
                 header = T)#读取文件,没什么好说的
#首先我们看一下数据结构,发现geneids列的gene使用"|"分隔开的
> head(data[1,])#查看第一行数据
                               name category   source                    taxname taxid                      geneids
    PathBank:SMP0119368 Coagulation  Protein PathBank Mus musculus (house mouse) 10090 2147|14061|14066|56316|69568
> data <- data %>%  #选定需要的列,transmute()这个函数很有意思,可以多注意
+   transmute(
+     name,
+     category,
+     source,
+     taxname,
+     taxid,
+     geneids
+   )
> #到此,前期数据的整理就完成了

关于"|"分隔的处理,详见此处
接着,我们定义一个function,方便后续代码的编写,很简单,就是bitr的基本使用

#定义一个注释函数ann,其作用是转化id
#=======================================================
ann <- function(a){
  c <- bitr(a$geneids%>%str_split("\\|")%>% unlist,
            fromType = "ENTREZID", 
            toType = "SYMBOL",
            OrgDb = "org.Mm.eg.db", 
            drop = TRUE)
  return(c)
  
}#注意,demo数据的geneid使用"|"分隔的.|是一个特殊符号,应该使用转义符"\\"
#======================================================

关于自定义函数 function() 的介绍,参考此处
将第一次循环手动运行,防止后续循环中进行合并的时候报错。会有更好的办法,但是我水平有限。

#准备一个data frame,不然再循环中合并哪里会报错,相当把第一次循环
> #手动运行了,代码水平太差只能这样凑合了.
>   a <- data[1,]
>   c <- bitr(a$geneids%>%str_split("\\|")%>% unlist, 
+             fromType = "ENTREZID", 
+             toType = "SYMBOL", 
+             OrgDb = "org.Mm.eg.db", 
+             drop = TRUE)
'select()' returned 1:1 mapping between keys and columns
Warning message:
In bitr(a$geneids %>% str_split("\\|") %>% unlist, fromType = "ENTREZID",  :
  20% of input gene IDs are fail to map... #这里的意思是,有一部分的geneid和symbol没有匹配上,这是正常的。
  										   #一个set里基因数很少,所以匹配失败的百分比很高也无所谓
>   c <- paste0(c$SYMBOL,collapse = ",")
>   a$GeneSymbol <- c
>   a1 <- a

进入for() 循环

> system.time(#查看for循环运行了多久,可以删除,但是注意括号删除干净
+   for (i in 2: length(row.names(data))){#对每一行进行一次循环
+     a <- data[i,]
+     temp    <- try(c <- ann(a),
+                    silent=FALSE)
+     if('try-error' %in% class(temp))# 判断当前循环的try语句中的表达式是否运行正确
+     {
+       c <- paste0(row.names(a),"-NA") 
+       a$GeneSymbol <- c
+       a1 <- rbind(a1,a)# 如果循环报错,就运行这里
+     }else{
+       c <- paste0(c$SYMBOL,collapse = ",")
+       a$GeneSymbol <- c
+       a1 <- rbind(a1,a)#如果没有报错就运行这里
+     }
+     p <- i/length(row.names(data))#查看运行进度
+     print(paste0(round(100*p, 2),"%"))#当通路特别多时候,运行时间很长
+                                       #查看任务进度有助于平复心情
+   }
+ )
'select()' returned 1:1 mapping between keys and columns#忽略这个消息
[1] "0.01%"#这里就是任务进度了。
> write.csv(a1,"TaxID_10090_pathway_No_Duplicates_Duplicate_idtrans.csv",)#然后写出就好
> head(a1[1,])#最后就是这个样式,多添加了一列genesymbol
                               name category   source                    taxname taxid                      geneids          GeneSymbol
    PathBank:SMP0119368 Coagulation  Protein PathBank Mus musculus (house mouse) 10090 2147|14061|14066|56316|69568 F2,F3,Ggcx,Vkorc1l1
> 

完整的代码及demo数据可以访问github下载。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值