经验总结 | R语言批量读取目录下的文件然后按照行名对其进行整合成为data.frame

参考链接: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_v1
  • filelist_v2的结果(这个matrix就是我们理想中的列名了)
    filelist_v2

Step2:构建文件路径

files <- paste("F://张秀秀//过程性文件//10//26//count//",filelist,sep="") ##files为所有的路径

得到的即是我们要读取的文件的绝对路径(当然也可以是相对路径)
在这里插入图片描述

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矩阵之后,就是一个二项分布的数据,不知道后期在处理方法的选择上是否会有一些不同)。

总结:如果实践结果良好,考虑把所有的代码粘在后面

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值