05.热图
#测试数据
#pheatmap 绘制聚类热图的R包
a1=rnorm(100) #rnorm() 生成随机数
dim(a1)=c(5,20)
a2=rnorm(100)+2
dim(a2)=c(5,20)
library(pheatmap)
# cluster_rows 表示对行进行聚类
# cluster_cols表示进行列的聚类
pheatmap(a1,cluster_rows = F,cluster_cols = F)
# cbind: 根据列进行合并
# rbind: 根据行进行合并
pheatmap(cbind(a1,a2))
# show_rownames: 是否显示行名称
# show_colnames:是否显示列名称
pheatmap(cbind(a1,a2),show_rownames = F,show_colnames = F)
# rnorm() 生成随机数
# 生成[-2,2]内的100个随机数
a1=rnorm(100)
dim(a1)=c(5,20)
pheatmap(a1)
# 生成随机数基础+2的数
# 只有区间发生变化
a2=rnorm(100)
dim(a2)=c(5,20)
pheatmap(a2)
# 左边为a1,右边为a1,a2
pheatmap(cbind(a1,a2),cluster_cols = F)
b=cbind(a1,a2) #对b进行列的聚类
b=as.data.frame(b)
# names()进行命名
names(b)= c(paste('a1',1:20,sep='_'),paste('a2',1:20,sep='_'))
pheatmap(b,cluster_cols = F)
# paste() 粘贴函数
tmp1=paste('a1',1:20,sep='_')
tmp2=paste('a2',1:20,sep='_')
# 帮助文档提供examples
?pheatmap
# Generate annotations for rows and columns
annotation_col = data.frame(
CellType = factor(rep(c("CT1", "CT2"), 5)),
Time = 1:5
)
pheatmap(test, annotation_col = annotation_col)
tmp=data.frame(group=c(rep('a1',20),rep('a2',20)))
rownames(tmp)=colnames(b)
pheatmap(b,annotation_col = tmp)
# rep() 重复函数
tmp1=rep('a1',5)
tmp2=rep('a2',5)
# 给热图行列命名
# ① 先创建后命名
# ② 先命名后创建
c=matrix(1:12,byrow = T,nrow = 4)
rownames(c)=c(paste('a1',1:4,sep='_'))
colnames(c)=c(paste('b1',1:3,sep='_'))
# dimnames =list(a1,b1)
rm(c)
rownames=c(paste('a1',1:4,sep='_'))
colnames=c(paste('b1',1:3,sep='_'))
x=matrix(1:12,byrow = T,nrow = 4,dimnames = list(rownames,colnames))
06. 选取差异明显的基因的表达量矩阵绘制热图
rm(list =ls())
options(stringAsFactors = F)
load(file = 'step1-output.Rdata')
dat=dat[,-3]
group_list=group_list[-3]
dat[1:4,1:4]
dim(dat)
dat=log2(dat)
dat[1:4,1:4]
d_h <- function(dat,group_list){
cg=names(tail(sort(apply(dat,1,sd)),1000))##选取其中对dat所有行做标准差排序取最大的1000个基因的名称
library(pheatmap)
pheatmap(dat[cg,],show_colnames=F,show_rownames=F)#选取行名为cg的绘制热图
n=t(scale(t(dat[cg,])))
n[n>2]=2
n[n<-2] = -2#标准化
pheatmap(n,show_colnames=F,show_rownames=F)
ac=data.frame(g=group_list)
rownames(ac)=colnames(n)#分组
pheatmap(n,show_colnames=F,show_rownames=F,
annotation_col = ac)#绘图
}
#调用自定义函数
d_h(dat,group_list)
dat <- dat[,-3]
group_list <- group_list[-3]
d_h(dat,group_list)
07. id 转换
# stringr
install.packages("stringr")#下载R包
library(stringr)#加载R包
#演示①:strsplit
strsplit('ENSG00000000000003.13','[.]')
strsplit('ENSG00000000000003.13','[.]')[[1]][1]
#演示②:str_split
c=data.frame(paste(paste('ENGS000030',1:60,sep=''),'.',1:60,sep=''))
c$c_names=str_split(c$paste.paste..ENGS000030...1.60..sep.............1.60..sep......,'[.]',simplify = T)[,1]
a=read.table('Felis_catus.Felis_catus_9.0.dna.chromosome.A2.fa',sep='\t',header = T)
colnames(a)='ensembl_id'
a$gene_id=1:2857863
b=data.frame(1:2857863,paste('AGY',1:2857863,sep =''))
colnames(b)=c('gene_id','symbol')
# 关联函数:merge()
d=merge(a,b,by='gene_id',all.x=T) # 框1和框2关联起来
# 排序
e=data.frame(paste('AGY',1:2857863,sep =''),paste('BHZ',1:2857863,sep =''))
names(e)=c('symbol','symbol_2')
f=merge(d,e,'symbol',all.x = T)
table(f$ensembl_id)[table(f$ensembl_id)>1]
d=d[order(d$V1),]#order()函数会返回一个原向量在排序后的位置下标向量。
d=d[!duplicated(d$V1),]#筛选非重复元素
d=d[match(a$V1,d$V1),]#找到一个元素在另一个元素的顺序
# duplicated
c=c(1,1,2,2,3,3,4,4,5)
duplicated(c)
!duplicated(c)
d=!duplicated(c)
e=duplicated(c)
c[d]
c[e]
c=c(6,5,4,3,2,1,0)
order(c)