#TCGA系列#利用R处理多个文件夹下的miRNA表达数据

本文介绍如何利用R语言处理TCGA项目中分布在多个文件夹下的miRNA表达数据,包括文件的整理、数据提取、矩阵合并以及列名替换等步骤,最终进行数据预处理。

- 当我们TCGA官方下载数据miRNA表达数据时,这些数据大多都位于多个文件夹下,而且有类似文件容易混淆。

在这里插入图片描述 在这里插入图片描述

- 说实话,R处理文件并没有perl好用,但并不代表不能处理

f1 <- list.files(pattern="isoforms.quantification",recursive=T)
f2 <- list.files(pattern="isoforms.quantification.txt.parcel",recursive=T)
f3 <- setdiff(f1,f2);#取两者的差集
f4 <- strsplit(f3,"/")
f5 <- data.frame(matrix(unlist(f4), nrow=491, byrow=T))
f6 <- as.matrix(f5)
f7 <- f6[,3]

结果展示,最终把文件名取出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

- 取出样本后,就该提取数据合为矩阵

#取某个样本,求提取YES后剩的最终行数
da1 <- read.table(f3[1],header = T,stringsAsFactors = F)
da2 <- da1[da1$cross.mapped=="N",]
da3 <- aggregate(read_count~miRNA_region,data=da2,sum)
da <- data.frame(da3$miRNA_region)
colnames(da) <- "miRNA_region"

#利用循环把所有样本的RPM值合为矩阵
for(i in 1:length(f3)){
  a <- read.table(f3[i],header = T,stringsAsFactors = F) 
  b <- a[a$cross.mapped=="N",]
  RPM <- aggregate(read_count~miRNA_region,data = b,sum)
  RPM$read_count <- (RPM$read_count*10^6)/sum(RPM$read_count)
  da <- merge(da,RPM,by="miRNA_region") 
}

注意矩阵的列名

- 修改列名为样本编号

#利用json包给RPM值矩阵改列名
library(rjson)
meta <- jsonlite::fromJSON("metadata.json")
f8 <- meta[,c(3,12)]#提取文件名和样本编号
f9 <- f8[,2]
f10 <- data.frame(matrix(unlist(f9), nrow=2203, byrow=T))
f11 <- cbind(f8[1],f10[3])#合并文件名和样本编号
f12 <- as.data.frame(f7)
colnames(f12) <- "file_name"
f13 <- merge(f12,f11,by="file_name",sort = F)#利用文件名取交集
f14 <- as.character(f13[,2]) 
colnames(da) <- c("miRNA_region",f14)
write.table(da,file="express.txt",sep="\t",quote=F,row.names=F)

- 数据预处理

#数据预处理
xname <- colnames(da)
xname <- xname[-1]
#给样本分类
tumor <- grep(".*-01[AB]-.*",xname)
control <- grep(".*-11A-.*",xname)
data_control <- da[,c(1,control+1)]
data_tumor <- da[,c(1,tumor+1)]
#一行有超过30%的0时,去除该行
num1 <- apply(data_control[-1,],1,function(x){sum(x==0)})
data_con <- data_control[num1<133,]
num2 <- apply(data_tumor[-1,],1,function(x){sum(x==0)})
data_tum <- data_tumor[num2<14,]
data_all <- merge(data_tum,data_con,by="miRNA_region")
#将矩阵中剩余的0改为0.05
data_all[data_all==0] <- 0.05
write.table(data_all,file="express.txt",sep="\t",quote=F,row.names=F)

在这里插入图片描述

注:全部代码如下
setwd("C:\\Users\\Administrator\\Documents\\miRNA")

#读取多个文件夹下的文件
f1 <- list.files(pattern="isoforms.quantification",recursive=T)
f2 <- list.files(pattern="isoforms.quantification.txt.parcel",recursive=T)
f3 <- setdiff(f1,f2);#取两者的差集
f4 <- strsplit(f3,"/")
f5 <- data.frame(matrix(unlist(f4), nrow=491, byrow=T))
f6 <- as.matrix(f5)
f7 <- f6[,3]

#取某个样本,求提取YES后剩的最终行数
da1 <- read.table(f3[1],header = T,stringsAsFactors = F)
da2 <- da1[da1$cross.mapped=="N",]
da3 <- aggregate(read_count~miRNA_region,data=da2,sum)
da <- data.frame(da3$miRNA_region)
colnames(da) <- "miRNA_region"

#利用循环把所有样本的RPM值合为矩阵
for(i in 1:length(f3)){
  a <- read.table(f3[i],header = T,stringsAsFactors = F) 
  b <- a[a$cross.mapped=="N",]
  RPM <- aggregate(read_count~miRNA_region,data = b,sum)
  RPM$read_count <- (RPM$read_count*10^6)/sum(RPM$read_count)
  da <- merge(da,RPM,by="miRNA_region")  
}

#利用json包给RPM值矩阵改列名
library(rjson)
meta <- jsonlite::fromJSON("metadata.json")
f8 <- meta[,c(3,12)]#提取文件名和样本编号
f9 <- f8[,2]
f10 <- data.frame(matrix(unlist(f9), nrow=2203, byrow=T))
f11 <- cbind(f8[1],f10[3])#合并文件名和样本编号
f12 <- as.data.frame(f7)
colnames(f12) <- "file_name"
f13 <- merge(f12,f11,by="file_name",sort = F)#利用文件名取交集
f14 <- as.character(f13[,2]) 
colnames(da) <- c("miRNA_region",f14)
write.table(da,file="express.txt",sep="\t",quote=F,row.names=F)

#数据预处理
xname <- colnames(da)
xname <- xname[-1]
#给样本分类
tumor <- grep(".*-01[AB]-.*",xname)
control <- grep(".*-11A-.*",xname)
data_control <- da[,c(1,control+1)]
data_tumor <- da[,c(1,tumor+1)]
#一行有超过30%的0时,去除该行
num1 <- apply(data_control[-1,],1,function(x){sum(x==0)})
data_con <- data_control[num1<133,]
num2 <- apply(data_tumor[-1,],1,function(x){sum(x==0)})
data_tum <- data_tumor[num2<14,]
data_all <- merge(data_tum,data_con,by="miRNA_region")
#将矩阵中剩余的0改为0.05
data_all[data_all==0] <- 0.05
write.table(data_all,file="express.txt",sep="\t",quote=F,row.names=F)



评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值