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文件好好看看!
rm(list=ls())
library(org.Hs.eg.db)
eg2symbol=toTable(org.Hs.egSYMBOL)
eg2name=toTable(org.Hs.egGENENAME)
eg2alias=toTable(org.Hs.egALIAS2EG)
-
eg2alis_list=lapply(split(eg2alias,eg2alias$gene_id),function(x){paste0(x[,2],collapse =
";")})
GeneList=mappedLkeys(org.Hs.egSYMBOL)
-
if(
GeneList[1]
%in% eg2symbol$symbol ){
symbols=GeneList
geneIds=eg2symbol[match(symbols,eg2symbol$symbol),'gene_id']
}else{
geneIds=GeneList
symbols=eg2symbol[match(geneIds,eg2symbol$gene_id),'symbol']
}
geneNames=eg2name[match(geneIds,eg2name$gene_id),'gene_name']
geneAlias=sapply(geneIds,function(x){ifelse(is.null(eg2alis_list[[x]]),"no_alias",eg2alis_list[[x]])})
-
createLink <-
function(base,val)
{
-
sprintf('<a href="%s" class="btn btn-link" target="_blank" >%s</a>',base,val)
##target="_blank"
}
gene_info=data.frame( symbols=symbols,
geneIds=createLink(paste0("http://www.ncbi.nlm.nih.gov/gene/",geneIds),geneIds),
geneNames=geneNames,
geneAlias=geneAlias,
stringsAsFactors = F
-
)
#library("xtable")
#print(xtable(gene_info), type="html",include.rownames=F, file='all_gene.anno',sanitize.text.function = force)
file='all_gene_bioconductor.html'
y <- DT::datatable(gene_info,escape = F,rownames=F)
DT::saveWidget(y,file)
排版有点麻烦,请直接点击阅读原文去查看吧~~~
PS:这个代码非常经典,值得大家用心学习
- Spring整合Quartz分布式调度
- [接口测试 - 基础篇] 11 掌握下python解析YAML格式也是需要的
- 如何用Python创建眼下火爆的区块链?这篇干货请收藏
- [接口测试 - 基础篇] 10 别啊,还有INI格式呢,别忘记我
- [接口测试 - 基础篇] 09 其实吧,读写csv格式也是要掌握的
- 【源码分享】机器学习之Python支持向量机
- [接口测试 - 基础篇] 08 封装个基本的excel解析类
- 关关的刷题日记10——Leetcode 1. Two Sum 方法1
- BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)
- 10个Python面试常问的问题
- 关关的刷题日记11——Leetcode 1. Two Sum 方法2、3
- 计蒜客:百度的科学计算器(简单)【python神解】
- 关关的刷题日记12——Leetcode 189. Rotate Array 方法1、2、3
- 关关的刷题日记13——Leetcode 414. Third Maximum Number
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java ServletContext详解
- Java web Cookie详解(持久化+原理详解+共享问题+设置中文+发送多个Cookie)
- 实战记录之SQL server报错手工注入
- 树莓派基础实验23:触摸开关传感器实验
- springmvc 文件下载 VS resteasy 文件上传下载
- Struts Scan工具的使用
- 树莓派基础实验24:超声波测距传感器实验
- 数据结构与算法系列2 线性表 链表的分类+使用java实现链表+链表源码详解
- 从spring boot 启动过程看apollo的初始化过程( 二)
- Apache IoTDB 系列教程-4:客户端接口
- 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解
- Kali中密码暴力破解工具hydra的使用
- Apache IoTDB 系列教程-8:文件同步工具
- 树莓派基础实验25:DS18B20温度传感器实验
- 迈出加入 Apache IoTDB 社区的第一步!(订阅邮件、调试代码)