【R语言】如何不优雅地修改10X数据文件名(

标准10X数据读取

每个样本文件包括三个文件:

barcodes.tsv:细胞标记条码

features.tsv:基因信息

matrix.mtx:基因表达量信息

通过lapply()用Read10X( file.path(dir,pro)依次读入样本文件,样本文件夹会存入Seurat对象构建orig.ident

#读入存放所有样本文件夹的文件夹
dir="./filtered_feature_bc_matrix" 
samples=list.files( dir )
samples
​
sceList = lapply(samples,function(pro){ 
  print(pro) 
  counts =  Read10X( file.path(dir,pro))
  return(counts)
})
​
#为列名(barcodes)加上样本名
for (i in 1:length(sceList)) {
  col<-colnames(sceList[[i]])
  colnames(sceList[[i]])<-paste0(samples[i],"_",col)
}
​
#构建Seurat对象
merge <- do.call(cbind,sceList)
sce =CreateSeuratObject(counts = merge ,
                        min.cells = 5,
                        min.features = 300 )#常用参数:min.cells为组织中分离的最少细胞数,min.features为一个细胞中测出的最少的基因数量

原数据格式

以GSE188545数据集为例,下载的每个GSM数据有三个文件,但命名并不规范,

大概像这样:

GSM5685287_AD02MTG_barcodes.tsv.gz

GSM5685287_AD02MTG_genes.tsv.gz

GSM5685287_AD02MTG_matrix.mtx.gz

GSM5685288_AD12MTG_barcodes.tsv.gz

GSM5685288_AD12MTG_genes.tsv.gz

GSM5685288_AD12MTG_matrix.mtx.gz

修改思路

1.创建每个GSM数据的文件夹

2.将每个GSM对应的三个文件移入对应文件夹

3.为每个文件夹的文件修改为标准名字

4.需要的数据:创建需要的正则表达式(用于转移文件),文件路径/改名需替代字符(用于文件改名)

全程for循环解决

getwd()
# setwd("..")
setwd("./GSE188545_RAW")# 需要改动处1
# 1.创建样本子文件夹
x<-paste0("GSM56852",c(87:98))# 需要改动处2
l<-length(x)
for(i in 1:l){
  dir.create(x[i])
}
​
# 2.创建需要的正则表达式(用于转移文件),文件路径/改名需替代字符(用于文件改名)
v<-c()
y<-c()
d<-c()
t<-c("_AD02MTG_","_AD12MTG_","_AD30MTG_","_AD04MTG_","_AD16MTG_","_AD17MTG_","_HC14MTG_",
     "_HC19MTG_","_HC35MTG_","_HC03MTG_","_HC07MTG_","_HC37MTG_")# 改动处3
for(i in 1:l){
  y[i]<-paste0("D:/sigle/GSE188545/GSE188545_RAW/",x[i])# 改动处4
  v[i]<-paste0(x[i],".*.gz$")
  v[i]<-paste0("^",v[i])
  d[i]<-paste0(x[i],t[i])
}
v
y
d
​
dir<-getwd()
# 3.转移文件
for (i in 1:l) {
  list.files(getwd(),pattern =v[i],full.names = TRUE) |> purrr::map(\(x) file.copy(x,to = y[i]))
  list.files(getwd(),pattern =v[i],full.names = TRUE) |> purrr::map(file.remove)
}
​
# 4.文件改名
for(i in 1:l){
  setwd(dir)
  print(y[i])
  # 不知什么缘故,循环时以下两条命令如果只运行一次则无反应
  folder<-setwd(y[i])
  files<-list.files(folder)
  folder<-setwd(y[i])
  files<-list.files(folder)
  for (f in files){
    print(d[i])
    newname<-sub(d[i],'',f) #将原文件中的字符"GSM5685288_AD02MTG_",替换为空
    newname<-sub('genes','features',f)# 改动处5,有的数据集features命名不规范
    file.rename(f,newname)
  }
}
getwd()
setwd("..")
getwd()

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值