利用Rstudio新建一个名为Differential_Expression_analysis的project,利用以下代码进行分析(此步骤将获得每个基因在不同比较组合中的差异表达情况)
运行过程如有报错,请补齐 }
#清空当前环境中的所有变量 rm(list = ls()) { #如果没有安装"BiocManager",则进行安装,否则跳过 {if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") } #安装并加载R包"DESeq2" {if (!requireNamespace("DESeq2", quietly = TRUE)) BiocManager::install("DESeq2") } library(DESeq2) #输入TPM数据 tpm_input <- read.table(file = "G:/R-Demo/counts_to_TPM/all_TPM.txt", header = T,row.names = 1,sep = "\t") #去除各转录组中tpm值均为0的基因 tpm <- tpm_input[rowSums(tpm_input) != 0,] # 将TPM数据乘以1000并四舍五入,不保留小数 tpm <- round(tpm) head(tpm) # 创建条件信息:需要因子factor格式 #主要是转录组中包含重复,需要指定哪些重复是对应一个样本的,后续需要对不同样本进行比较 conditions0 <- c("HF1", "HF2", "HF3", "HGP", "HGX", "HL", "HM1", "HM2", "HM3", "HP1", "HP2", "HP3", "HR", "HS", "HZZ") # 嵌套循环比较两两条件 for (i in 1:(length(conditions0)-1)) { for (j in (i+1):length(conditions0)) { condition1 <- conditions0[i] condition2 <- conditions0[j] # 打印两个条件的比较结果 print(paste("Comparing", condition1, "and", condition2)) # 在这里执行比较的操作,根据具体需求进行相应的处理 #将需要比较的对象与数据中的各列一一对应 conditions <- as.factor(rep(c(condition1, condition2),each = 3)) #整理countData:将两者数据分别进行查找录入 { tpm_DES1 <- tpm[,grep(condition1, colnames(tpm_input))] #新增一列Geneid进行合并 tpm_DES1$Geneid <- rownames(tpm_DES1) tpm_DES2 <- tpm[,grep(condition2, colnames(tpm_input))] tpm_DES2$Geneid <- rownames(tpm_DES2) #将两个数据框进行合并,以Geneid为参考 tpm_DES <- merge(tpm_DES1,tpm_DES2, by = "Geneid") rownames(tpm_DES) <- tpm_DES[,1] #去除Geneid列 tpm_DES <- tpm_DES[,-1] #将在各转录组中均为0的基因去掉 tpm_DES <- tpm_DES[rowSums(tpm_DES) != 0,] } # 创建 DESeq2 的数据对象 #countData是表达量矩阵或者数据框 #colData是使用condition作为差异表达分析的条件变量。 #在这种设计下,DESeq2将计算每个基因在不同条件下的差异表达。 dds <- DESeqDataSetFromMatrix(countData = tpm_DES, colData = data.frame(condition = conditions), design = ~ condition) #进行差异分析:这一步耗时较长,45个转录组的count文件花费大约2小时 dds <- DESeq(dds) #获取差异表达基因的统计结果。 res <- results(dds, cooksCutoff = F, independentFiltering = F) #查看前几行 head(res) #将res转成dataframe格式 res_dataframe <- data.frame(res)
head(res_dataframe) #如果没有安装dyplr,则安装dyplr,否则会直接跳过 {if (!requireNamespace("dplyr", quietly = TRUE)) install.packages("dplyr") } #加载dplyr包 library(dplyr) #在res_dataframe中新建group列 #根据log2FoldChange和padj条件进行写入“up”或者“down”,将结果赋予res_dataframe2 res_dataframe %>% mutate(group =case_when( log2FoldChange >= 2 & padj <= 0.05 ~ "UP", log2FoldChange <= -2 & padj <= 0.05 ~ "DOWN", TRUE ~ "NOT_Change" )) -> res_dataframe2
#统计group列中不同数值的情况 table(res_dataframe2$group) #输出路径定义: File_output_path <- "./Differential_Expression_results/" #输出文件名定义: File_name <- paste0(condition1, "_vs_", condition2,".csv") output_file <- paste0(File_output_path, File_name) #导出.csv文件,quote=F:禁止在文本中添加“” write.csv(res_dataframe2,file = output_file, quote = F)