数据整理
筛选:按照一定列名顺序筛选:filter函数
filter(data,colname=="")
按照rowname筛选:subset函数
subset(data,grepl("^.*XXX.*$,data))
去除空(NA)值:na.omit(data)
delete needless x colname:data[c(-x)]
delete annotation repetition:#将gene annotation变为行名时用到
match(unique(data$X),data$X)
match函数查找数据集中每个唯一X的第一行的位置,然后根据位置提取这些行和所需的列。
distinct(data,data$X,.keep_all=T)
distinct函数必须搜索并排除重复项。.keep_all函数用于保留输出数据框中的所有其他变量,但是会出现一列新数据
将gene annotation变为行名
rownames(data)<-data[,1]#将第一行作为data的行名
data<-data[,-1]#去除第一行
分组差异分析
#构建分组
group_list=ifelse(as.numeric(substr(colnames(data),14,15))<10,'tumor','normal')
design<-model.matrix(~0+factor(group_list))
colnames(design)=levels(factor(group_list))
rownames(design)=colnames(data)
design
#limma标准化,但用到edgeR的calcNormFactors故也得library(edgeR)
dge<-DGEList(counts=data)
dge<-calcNormFactors(dge)
logCPM<-cpm(dge,log=TRUE,prior.count=3)#prior.count=3为了防止取log2过小
#limma差异分析
v<-voom(dge,design,plot = T,normalize="quantile")
fit<-lmFit(v,design)
cont.matrix=makeContrasts(contrasts = c('tumor-normal'),levels = design)
fit2=contrasts.fit(fit,cont.matrix)
fit2=eBayes(fit2)
tempOutput=topTable(fit2,coef = 'tumor-normal',n=Inf)
DEG_limma_voom=na.omit(tempOutput)
head(DEG_limma_voom)
write.csv(DEG_limma_voom,"limma差异分析结果.csv",quote = F,row.names = T)
save(DEG_limma_voom,file = "limma差异分析结果.Rda")
原作者:想养猫的龙哥 https://www.bilibili.com/read/cv9942855/ 出处:bilibili