今天在使用一个R包分析scRNA数据时,遇到了一个困难,就是这个R包的函数要求输入文件必须为mtx格式文件,然而我使用的那个数据,原作者只提供了中间数据,并未提供10X的三个标准格式文件数据。
scRNA-HCC解决办法
1.下载文件的测序数据,从上游分析得到(因为我使用的数据细胞数有7w,因此这种方法对于我的设备来说是不可行的)。
2.自己制作这3个文件。
于是我采用方法二
首先需要解析3个文件的规律 ,前两个文件很好理解,barcodes.tsv 和 genes.tsv,就是表达矩阵的行名和列名,而matrix.mtx,就稍微复杂一点,仔细看可知道,matrix.mtx 文件有3列信息,第一列是行号,第二列是列号,第三列是基因表达量,而这里的基因表达量仅仅是列出有表达量的基因即可(就是说去除了0值的基因)。
接下来就是正式的制作:
#首先读取seurat处理的变量
pbmc <- readRDS("pbmc_data.rds")
counts <- pbmc@assays$RNA@counts #使用counts
ct <- as.matrix(counts) #将稀疏矩阵转回普通文本矩阵
制作barcodes.tsv 和 genes.tsv,代码非常简单:
#genes.tsv
write.table(data.frame(rownames(ct),rownames(ct)),file = 'genes.tsv',
quote = F,sep = '\t',
col.names = F,row.names = F)
#barcodes.tsv
write.table(colnames(ct),file = 'barcodes.tsv',quote = F,
col.names = F,row.names = F)
matrix.mtx 文件是3列,第一列是行号,第二列是列号,第三列是基因表达量
#首先写一个头信息
file="matrix.mtx"
sink(file)
cat("%%MatrixMarket matrix coordinate integer general\n")
cat("%\n")
cat(paste(nrow(ct),ncol(ct),sum(ct>0),"\n"))
sink()
#再写入表达量信息
tmp=do.call(rbind,lapply(1:ncol(ct),function(i){
return(data.frame(row=1:nrow(ct),
col=i,
exp=ct[,i]))
}) )
tmp=tmp[tmp$exp>0,]
head(tmp)
write.table(tmp,file = 'matrix.mtx',quote = F,
col.names = F,row.names = F,append = T )
#运行时间根据数据大小定。
至此,10X的三个标准文件就制作完成了
网友评论