转录组下游分析

(linux)上游分析得到count矩阵,进行下游分析(R)
流程:各组count合并矩阵--去除Ensemble ID版本号(.)--去重过滤--ID转换(1、AnnoProbe包annoGene函数转换 2clusterProfiler包bitr函数转换)--

# 清空环境
rm(list = ls())
## 报错设置为英文
Sys.setenv(LANGUAGE = "en")

######2.1. 软件准备
if (!requireNamespace("BiocManager", quietly = TRUE))install.packages("BiocManager")
if (!requireNamespace("stringr", quietly = TRUE))install.packages("stringr")
if (!requireNamespace("biomaRt", quietly = TRUE))install.packages("biomaRt")
if (!requireNamespace("filelock", quietly = TRUE))install.packages("filelock")
if (!requireNamespace("AnnotationDbi", quietly = TRUE))install.packages("AnnotationDbi")
if (!requireNamespace("clusterProfiler", quietly = TRUE))install.packages("clusterProfiler")
if (!requireNamespace("org.Hs.eg.db", quietly = TRUE))install.packages("org.Hs.eg.db")
if (!requireNamespace("AnnoProbe", quietly = TRUE))install.packages("AnnoProbe")

######2.2.多个count矩阵的合并(merge)
setwd("D:\\fsdownload\\学校服务器\\psj\\SW620 LOVO 测序数据\\SW620\\bam文件")
v1<- read.table("SW620-V-1.txt",header = TRUE,sep = "\t")
v2<- read.table("SW620-V-2.txt",header = TRUE,sep = "\t")
v3<- read.table("SW620-V-3.txt",header = TRUE,sep = "\t")
Con_count<- merge(merge(v1,v2,by="Geneid"),v3,by="Geneid")
x1<- read.table("SW620-82-1.txt",header = TRUE,sep = "\t")
x2<- read.table("SW620-82-2.txt",header = TRUE,sep = "\t")
x3<- read.table("SW620-82-3.txt",header = TRUE,sep = "\t")
UL82_count<- merge(merge(x1,x2,by="Geneid"),x3,by="Geneid")
counts <- merge(Con_count,UL82_count,by="Geneid")#merge函数通过相同的Geneid列合并矩阵
names(counts)<-c("ENSEMBL","Con_1","Con_2","Con_3","UL82_1","UL82_2","UL82_3")#数据框name()即列名
##简化
#counts <- merge(merge(merge(v1,v2,by="Geneid"),v3,by="Geneid"),merge(merge(x1,x2,by="Geneid"),x3,by="Geneid"),by="Geneid")
#names(counts)<-c("ENSEMBL","Con_1","Con_2","Con_3","UL82_1","UL82_2","UL82_3")
##

######2.3. 去除Ensemble ID版本号
counts$ENSEMBL=unlist(str_split(counts$ENSEMBL,"[.]",simplify=T))[,1]###!!!
#counts$ENSEMBL列根据字符串的点号进行分割。
#a = str_split(a,"\\.",simplify = T)[,1] #不带\\直接写"."是正则表达式任意字符的意思,需要\\来转义。

######2.4.去重:保留平均值大的重复行
dim(counts)
counts <- na.omit(counts)#删除NA值  
counts<- counts[apply(counts,1,max)>=10, ]#剔除count值小于10的行
dup_gene<-data.frame(gene=counts$ENSEMBL,mean=apply(counts[,2:7],1,mean))#创建矩阵,计算每行的平均值(不能包括第一列)
counts1 <-counts[order(dup_gene$mean,decreasing = T),]#按平均值降序排列
counts1<- counts1[!duplicated(counts1 $ENSEMBL),]#保留平均值大的重复行
dim(counts1)
counts1 <- counts1[order(counts1 $ENSEMBL),]
setwd("D:\\fsdownload\\学校服务器\\psj\\SW620 LOVO 测序数据\\SW620")
write.table(counts1,file=".\\sw620-counts.txt" , sep ="\t", row.names =F,col.names =T,quote = FALSE)
write.csv(counts1,file=".\\sw620-counts.csv",row.names = F)

#######2.5 ID转换(如果提取蛋白编码基因,建议用AnnoProbe包)
###2.5.1. 基因类型注释:AnnoProbe包annoGene函数提取protein_coding基因,利用自带gene_symbol完成ID转换
library(AnnoProbe)
IDs <- counts1$ENSEMBL
ID_type = "ENSEMBL"
type <- annoGene(IDs, ID_type = "ENSEMBL",out_file ='ID_biotypes.csv')



![cdbf2c0d47d1641dd7ca250404e5035.png](https://upload-images.jianshu.io/upload_images/28015006-c48c3b201c17b871.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#提取protein_coding基因
library(dplyr)
pro_coding<- filter(type,biotypes=="protein_coding")#提取type中biotypes=="protein_coding"的行
pro_coding <- pro_coding[!duplicated(pro_coding$ENSEMBL), ]#去除重复蛋白基因注释
protein_coding <- merge(counts1, pro_coding, by = c("ENSEMBL", "ENSEMBL"))#通过ENSEMBL合并数据框
protein_ENSEMBL <- protein_coding[,1:7]#保留"ENSEMBL","Con_1","Con_2","Con_3","UL82_1","UL82_2","UL82_3"列
write.csv(protein_ENSEMBL, file = "./procode_ENSEMBL.csv",row.names = F)
#x <- protein_coding[duplicated(protein_coding$SYMBOL),] 报错原因:多个ENSEMBL对应一个SYMBLE;或SYMBL未标出亚家族
##ENSEMBL转为SYMBOL
#保留"Con_1","Con_2","Con_3","UL82_1","UL82_2","UL82_3","SYMBOL"列,并将SYMBOL列作为第一列
protein_SYMBOL <- protein_coding %>% select(8,2,3,4,5,6,7)
#简化 protein_SYMBOL <- protein_coding[,c(8,2,3,4,5,6,7)]
write.csv(protein_SYMBOL, file = "./protein_SYMBOL_AnnoProbe.csv",row.names = F)

###2.5.2. clusterProfiler包bitr()函数转换ID
library(clusterProfiler)
library(org.Hs.eg.db)
table(duplicated(protein_ENSEMBL$ENSEMBL)) # 检查是否有重复的ensemble ID
dim(protein_ENSEMBL)
gene_id <- bitr(protein_ENSEMBL$ENSEMBL, 
            fromType = "ENSEMBL",
            toType = "SYMBOL",
            OrgDb = org.Hs.eg.db)#将ENSEMBL转为SYMBOL
dim(gene_id)
protein_symbol <- merge(gene_id, protein_ENSEMBL, by = c("ENSEMBL", "ENSEMBL"))
write.csv(protein_symbol, file = "./protein_symbol_bitr.csv",row.names = F)
dim(protein_SYMBOL)
dim(protein_symbol)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容