ID转换大全

实际上掌握了编程的思维,任何一门语言都可以做id转换! 对于初学者来说,这个是非常实用的一个,很多人当初就是因为要做这个转换,才慢慢走入了编程的道路。 使用大部分软件的时候,第一步就是文件数据准备,基本上都是数据的拆分和整合,这个拿id转换做基础练习也挺好的! 本来应该作为第一讲,但是当初认为太基础了,而忽略掉了,放在这里也好,大部分同学已经跟我们学习两个月了,可以拿这个题目来检验自己的水平了! ID转换简单来说,就是找到对应关系表,然后用hash或者字典对应一下即可。但也可以很复杂:

为什么要转换id? 有多少种ID? 什么id权威? id是一一对应的吗? ID是什么生信组织维护? id有版本吗? id一定正确吗? 什么情况下选择什么id? 不同数据库下载的id对应表一定一样吗?

你们看我的博客,就知道,我是如何重视ID转换的:

用R的shiny包写一个基因的ID转换小程序 gene的各种ID转换终结者-bioconductor系列包 gene的symbol与entrez ID并不是绝对的一一对应的 还有论坛里面的:生信人必须了解的各种ID表示方式

当然,我们时间有限,不可能面面俱到,很多东西都是需要自己去慢慢挖掘的! 需要集中学习的是 entrez gene ID, HUGO symbol, refseq ID, ensembl ID 作业,就是用perl,python,R 来把1~1000 这1000个 entrez gene ID转为另外3个吧,如果该entrez gene ID不存在,就不用转了。 请自己下载基因ID的对应关系文件,参考http://www.bio-info-trainee.com/75.html 最后: 请务必把下面的代码运行一下,把输出的all_gene_bioconductor.html文件好好看看!

  1. rm(list=ls())
  2. library(org.Hs.eg.db)
  3. eg2symbol=toTable(org.Hs.egSYMBOL)
  4. eg2name=toTable(org.Hs.egGENENAME)
  5. eg2alias=toTable(org.Hs.egALIAS2EG)
  6. eg2alis_list=lapply(split(eg2alias,eg2alias$gene_id),function(x){paste0(x[,2],collapse = ";")})
  7. GeneList=mappedLkeys(org.Hs.egSYMBOL)
  8. if( GeneList[1] %in% eg2symbol$symbol ){
  9. symbols=GeneList
  10. geneIds=eg2symbol[match(symbols,eg2symbol$symbol),'gene_id']
  11. }else{
  12. geneIds=GeneList
  13. symbols=eg2symbol[match(geneIds,eg2symbol$gene_id),'symbol']
  14. }
  15. geneNames=eg2name[match(geneIds,eg2name$gene_id),'gene_name']
  16. geneAlias=sapply(geneIds,function(x){ifelse(is.null(eg2alis_list[[x]]),"no_alias",eg2alis_list[[x]])})
  17. createLink <- function(base,val) {
  18. sprintf('<a href="%s" class="btn btn-link" target="_blank" >%s</a>',base,val) ##target="_blank"
  19. }
  20. gene_info=data.frame( symbols=symbols,
  21. geneIds=createLink(paste0("http://www.ncbi.nlm.nih.gov/gene/",geneIds),geneIds),
  22. geneNames=geneNames,
  23. geneAlias=geneAlias,
  24. stringsAsFactors = F
  25. )
  26. #library("xtable")
  27. #print(xtable(gene_info), type="html",include.rownames=F, file='all_gene.anno',sanitize.text.function = force)
  28. file='all_gene_bioconductor.html'
  29. y <- DT::datatable(gene_info,escape = F,rownames=F)
  30. DT::saveWidget(y,file)

排版有点麻烦,请直接点击阅读原文去查看吧~~~

PS:这个代码非常经典,值得大家用心学习

原文发布于微信公众号 - 生信技能树(biotrainee)

原文发表时间:2017-03-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术栈

阿里巴巴制定了这 16 条「设计规约」

说明:有缺陷的底层数据结构容易导致系统风险上升,可扩展性下降,重构成本也会因历史数据迁移和系统平滑过渡而陡然增加,所以,存储方案和数据结构需要认真地进行设计和评...

1203
来自专栏Flutter入门到实战

关于烂代码的那些事 – 评价代码优劣的方法

秦迪,微博研发中心技术专家,2013 年加入微博,负责微博平台通讯系统的设计和研发、微博平台基础工具的开发和维护,并负责微博平台的架构改进工作,在工作中擅长排查...

1192
来自专栏Cloud Native - 产品级敏捷

微服务架构设计 第七步: 分析微服务对外 API

2016.9.22, 北京, Ken Fang 每个微服务依照场景或功能点, 分解成一到多个的 User Stories。每个 User Story 经过开发人...

2099
来自专栏大数据挖掘DT机器学习

腾讯、网易、新浪新闻网站爬虫编写记录及评论格式分析

作者:reetsee.com首席运营官 http://blog.csdn.net/qq_17754181/article/details/45179667 至...

4635
来自专栏编程

浅谈CPU 并行编程和 GPU 并行编程的区别

CPU 的并行编程技术,也是高性能计算中的热点,那么它和 GPU 并行编程有何区别呢? 本文将做出详细的对比,分析各自的特点,为深入学习 CPU 并行编程技术打...

1888
来自专栏包子铺里聊IT

[包子分享] 构架模式: Microservices Architecture

http://baozitraining.org ---- ? 微服务构架是近年来比较流行的服务端应用构架,由其非常好的可伸缩性,稳定性以及灵活的协同开发模...

2986
来自专栏玄魂工作室

如何学python-第一课 入门简介

最近在论坛上闲逛的时候,我发现了一些相当不错的python脚本编程的文章。不过,这些文章也有它们的局限性,因为它们更多的是在介绍一些基础的语法,而不是关于无比热...

37010
来自专栏牛客网

百度测试开发实习生一面面经

2125
来自专栏技术点滴

使用DataFlow表达ControlFlow的一些思考

分支和循环是最常见的控制流形式。由于控制条件的存在,总有一部分代码片段会执行,另一部分不会执行。

993
来自专栏敏捷开发&项目管理

TDD( 测试驱动开发) Overview

第一篇技术博客,希望有人支持,您的关注是我的动力... 本文主要是基于本人的开发经验,概叙一下TDD,也就是测试驱动开发。我比较喜欢用问题方式来写,语言水平有限...

3465

扫码关注云+社区