生物信息学与算法R语言数据科学与R语言

从CAZy database中爬取数据+多恶心的数据都要坚持清洗

2018-08-12  本文已影响10人  PriscillaBai

糖基因的分类:

目前储存糖基因的数据库:


我从CAZy中提取想要的糖甘水解酶和糖基转移酶的全部基因
CAZy:提供了酶分子序列的家族信息,物种来源,基因序列,蛋白序列,三维结构,EC分类,相关数据库链接……

1.选基因组数据库


2.将物种选人

3 此时的网页:
http://www.cazy.org/e358.html
心中窃喜,html就是表格形式,可以爬取了。
  1. 打开R
library(XML)
url<- "http://www.cazy.org/e358.html"
df1 <- readHTMLTable(url,header=T,stringAsFactors=F)
raw_data<-as.data.frame(df1[[5]])
colnames(raw_data)<-as.character(t(raw_data)[,1])
raw_data<-raw_data[-c(1,2),]
raw_data

上图就是我们爬取的数据,我发现,family中以GT开头的是糖基转移酶,以GH开头的是糖基水解酶,于是我分别把它们提取出来

library(tidyr)
library(dplyr)
GT<-raw_data[grepl("GT",raw_data$Family),]
GH<-raw_data[grepl("GH",raw_data$Family),]
GT[,1]<-as.character(GT[,1])
GH[,1]<-as.character(GH[,1])

protein name字段中,括号内的才是我需要的基因名,怎么把它清洗出来呢?

gene_1<-sapply(GT[,1],function(i){
  if(grepl("[(]",i)==FALSE){return(i)}
  else{strsplit(i,"[//()]")[[1]][2]}
})
gene_1<-as.data.frame(gene_1)
gene_2<-sapply(as.character(gene_1[,1]),function(i){
  if(grepl("[;]",i)==FALSE){return(i)}
  else{strsplit(as.character(i),";")[[1]]}
})
gene_2<-as.data.frame(unlist(gene_2))
m<-a
for(i in 1:length(gene_2)){m<-c(m,length(gene_2[[i]]))}
k<-max(m)
n<-c(gene_2[[1]],rep(NA,times=(k-length(gene_2[[1]]))))
for(i in 2:length(gene_2)){
  n<-rbind(n,c(gene_2[[i]],rep(NA,times=(k-length(gene_2[[i]])))))}
GT_1<-cbind(GT,n)
最终格式

每次看自己的代码都觉得不满意,太啰嗦。要走的路还有很长,加油吧。

上一篇下一篇

猜你喜欢

热点阅读