R语言批量合并不同文件夹中相同文件名(两个for循环)

setwd('C:\\Users\\86187\\Desktop\\ASSET-master\\GORD')
library(data.table)
library(dplyr)

#第一步获取要合并的文件名

lf <-list.files(pattern = ".txt$") #以report.tsv 结尾的
files <- gsub("\\.txt", "", lf)   #切掉后缀.tsv,获得这些名称,为循环准备
files[1]
for (a in seq_along(files)){
  micepath = './../'#指定目录
  dir = list.files(micepath,pattern = lf[a],recursive = TRUE,full.names = TRUE)#获取该目录下有多个以该文件名命名的文件;recursive = TRUE可以获取该目录下所有子文件夹中的文件
  n = length(dir)
  merge.data = read.table(dir[1],header = T,sep = '\t') #先读取第一个文件
  for (i in 2:n){
    new.data = read.table(file = dir[i], header=T, sep="\t")#从第二个开始读取
    merge.data = merge(merge.data,new.data,by='SNP',all = T)#以SNP列合并
    merge.data = na.omit(merge.data)#去除含NA的行
    merge.data = select(merge.data,c('SNP','CHR.x','BP.x','Z.x','Z.y'))#选择需要的列
    colnames(merge.data) = c('RSID','CHR','POS','Z.GORD','Z.MDD')#重命名列
    }
  write.table(merge.data,file = lf[a],row.names = F,sep = '\t',quote = F)#保存文件
}

② 批量处理一个文件夹中所有的文件

setwd('C:\\Users\\86187\\Desktop\\MDD_gastrointestinal tract disorders\\Cross-trait meta-analysis and pleiotropic loci\\sojo\\IBD')

library(data.table)
IBD = fread('./../../GORD_MDD/5_IBD.txt',header = T,sep = '\t')
lf <-list.files(pattern = ".txt$") #以report.tsv 结尾的
files <- gsub("\\.txt", "", lf)   #切掉后缀.tsv,获得这些名称,为循环准备
files[1]
for (i in seq_along(files)){
  rs5995992 = read.table(lf[i], sep = '\t', header = TRUE)
  rs5995992 = merge(rs5995992,IBD,by='SNP',all = T)#合并
  rs5995992 = na.omit(rs5995992)#去NA值
 rs5995992 = select(rs5995992,c('SNP','CHR','BP','A1.x','A2.x','Freq','BETA','SE','P'))
  colnames(rs5995992)[4]='A1'
  colnames(rs5995992)[5]='A2'
  write.table(rs5995992,file = lf[i],row.names = F,sep = '\t',quote = F)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值