参考链接:https://www.jianshu.com/p/3f1f27fdd35b
发现这哥们写得和我目前的需求是一致的,于是按照它的思路看一下。
我的目录文件:
文章图片
path <- "F://张秀秀//过程性文件//10//26//count"
fileNames <- dir(path)
filePath <- sapply(fileNames, function(x){paste(path,x,sep='/')})
data <- lapply(filePath, function(x){read.table(x, header=T)})
#这样批量读取得到一个list类型的数据 #后续操作不好操作
#另外只有34行,但是得到的数据的矩阵却出奇的大
#stop
barcode<-read.csv("F://张秀秀//过程性文件//10//26//merge_sub.csv")
barcode_need<-barcode[,c(1,2,25,23)]
data<-merge(filelist_v3,barcode_need) #到时候直接用这个去命名列名即可。
Step1 :获取目录下所有的文件名
##获取目录下面的所有文件的文件名
filelist <- list.files("F://张秀秀//过程性文件//10//26//count")
filelist得到的结果是我们指定的目录下的文件名,是一个vector类型的数据。

文章图片
#设置文件的列名
##去掉文件名中的尾缀,提取barcode
##这么做是因为文件名称就是样本名称,之后我们需要用这个matrix来做合并后的矩阵列名
filelist_v1 <- as.matrix(gsub("cell_","", filelist))
filelist_v2 <- as.matrix(gsub("_count.txt","", filelist_v1))
#这里其实有一些自己的小想法
#想利用师兄提供的那个atac和rna的barcode的对应关系,实现这种转换。
- filelist_v1的结果
文章图片
- filelist_v2的结果(这个matrix就是我们理想中的列名了)
文章图片
files <- paste("F://张秀秀//过程性文件//10//26//count//",filelist,sep="") ##files为所有的路径
【单细胞测序|经验总结 | R语言批量读取目录下的文件然后按照行名对其进行整合成为data.frame】得到的即是我们要读取的文件的绝对路径(当然也可以是相对路径)

文章图片
Step3:准备行名
这个时候遇到一个小问题:对data.frame进行行的筛选的时候,出现了行名的丢失。也即通过这种方式进行数据的提取。
test <- read.delim(file=files[1],header=F,sep="",row.names = 1) ##小测试
tail(test)
test[grep("__",row.names(test)),] #就是这样提取数据的时候把行列名的信息丢失了
现在在想办法解决这个问题。
后来想想,不用那么麻烦,因为我只需要行名。直接把行名保存为向量,提取前面几个字符作为行名即可。
rownames<-row.names(test)
length(rownames)
label<-rownames[1:5607738]
Step4:利用循环,批量读取文件中的数据
for (i in 1:(length(files)))
{
new_data<-as.matrix(read.delim(file=files[i],header=F,sep="",row.names = 1))
temp <- as.matrix(new_data[match(label,rownames(new_data)),1])
targetgene01 <- cbind(targetgene01,temp) ##合并,然后替换
}
#我总觉得这块有点琐碎,用match这种高级用法对我这种小菜鸟太有难度了
Step5:对数据框进行整理,写入文件
rownames(targetgene01) <- targetgene01[,1]#第一列需要设置成行名
targetgene01 <- targetgene01[,-1]##第一列可以删掉
colnames(targetgene01)<-filelist_v2##设置准备好的列名
#targetgene01[which(is.na(targetgene01) == T)] <- 0##没有match到的是NA,替换成0
write.csv(targetgene01,"data.csv",quote = F,col.names =T,row.names = T)
得到的数据文件基本上和我们预期的一致,但是还有以下需要优化的地方。
(1)列名转换为RNA-barcode,可以更方便的与给予RNA标签的细胞类型进行一一对应。
(2)是否有必要转换为0-1矩阵(因为转换为0-1矩阵之后,就是一个二项分布的数据,不知道后期在处理方法的选择上是否会有一些不同)。
总结:如果实践结果良好,考虑把所有的代码粘在后面
推荐阅读
- 笔记|R语言画图 | 如何看已知基因list的细胞类型特异性表达()
- 拓端tecdat|【视频】线性混合效应模型(LMM,Linear Mixed Models)和R语言实现案例
- 拓端tecdat|拓端tecdat|MATLAB用Lasso回归拟合高维数据和交叉验证
- 拓端tecdat|拓端tecdat|Python用Markowitz马克维兹有效边界构建最优投资组合可视化分析四只股票
- 拓端tecdat|拓端tecdat|R语言多变量广义正交GARCH(GO-GARCH)模型对股市高维波动率时间序列拟合预测
- 拓端tecdat|拓端tecdat|R语言用收缩估计股票beta系数回归分析Microsoft收益率风险
- 拓端tecdat|拓端tecdat|R语言样条曲线、分段线性回归模型piecewise regression估计个股beta值分析收益率数据
- 拓端数据tecdat|拓端tecdat|R语言数量生态学冗余分析RDA分析植物多样性物种数据结果可视化
- 拓端tecdat|拓端tecdat|R语言GJR-GARCH和GARCH波动率预测普尔指数时间序列和Mincer Zarnowitz回归、DM检验、JB检验