R 合并多个文件时,如何添加文件名的附加列?

R 合并多个文件时,如何添加文件名的附加列?,r,list,merge,filenames,R,List,Merge,Filenames,我正在合并几个文件(超过5000个)来做一些分析。下面的脚本将合并所有这些文件,但是,我不知道以后哪个是原始文件。我想做的是用文件名添加一个附加列。Row names=TRUE只添加数字,但我想要确切的名称 setwd("/path") library(data.table) temp2 = list.files(path= "path", pattern="*.txt") myfiles2 = lapply(temp2, funct

我正在合并几个文件(超过5000个)来做一些分析。下面的脚本将合并所有这些文件,但是,我不知道以后哪个是原始文件。我想做的是用文件名添加一个附加列。Row names=TRUE只添加数字,但我想要确切的名称

setwd("/path")
library(data.table)
temp2 = list.files(path= "path", pattern="*.txt")

myfiles2 = lapply(temp2, function(x)read.table(x, header=T, sep="\t", comment.char="#",na.strings=".",stringsAsFactors=FALSE,quote="",fill=FALSE))

merged_dataset <- data.table::rbindlist(myfiles2,fill=TRUE)

write.table(merged_dataset, file="merged_dataset.txt", sep="\t", quote=FALSE, row.names=FALSE)
我想要的是:

chr     pos     ref     alt...  phenotype  
1       1902906 T       G...    filename.txt
1       1904677 A       C...    filename.txt
2       1976878 C       G...    filename.txt
3       1908790 C       T...    filename.txt
1       1904566 T       A...    filename2.txt
2       1966789 T       G...    filename2.txt

我还没试过,但我会试试的

myfiles2 = lapply(temp2, function(x){a<- read.table(x, header=T, sep="\t", comment.char="#",na.strings=".",stringsAsFactors=FALSE,quote="",fill=FALSE); a$phenotype <- x})


myfiles2=lapply(temp2,函数(x){a

myfiles2 = lapply(temp2, function(x){a<- read.table(x, header=T, sep="\t", comment.char="#",na.strings=".",stringsAsFactors=FALSE,quote="",fill=FALSE); a$phenotype <- x})

myfiles2=lapply(temp2,函数(x){a

myfiles2 = lapply(temp2, function(x) data.frame(read.table(x, header=T, sep="\t", comment.char="#",na.strings=".",stringsAsFactors=FALSE,quote="",fill=FALSE), phenotype = x))
这项工作:

myfiles2 = lapply(temp2, function(x) data.frame(read.table(x, header=T, sep="\t", comment.char="#",na.strings=".",stringsAsFactors=FALSE,quote="",fill=FALSE), phenotype = x))
使用tidyverse

library(dplyr)
library(readr)
library(purrr)
map_dfr(temp2, ~ read_tsv(.x, comment = '#', na = ".", quote = "") %>%
        mutate(phenotype = .x))
使用tidyverse

library(dplyr)
library(readr)
library(purrr)
map_dfr(temp2, ~ read_tsv(.x, comment = '#', na = ".", quote = "") %>%
        mutate(phenotype = .x))

由于您已经在使用
data.table
,因此我建议使用
fread()
进行阅读。。 如果使用已收集的文件名命名结果列表,则可以使用
data.table::rbindlist()
-函数的
idcol
-参数在最终表中使用这些名称

library(data.table)

myfiles2 = lapply( temp2, data.table::fread, fill = TRUE) #optional improvement
names(myfiles2) <- basename(temp2)
data.table::rbindlist(myfiles2, use.names = TRUE, fill = TRUE, idcol = "phenotype")
库(data.table)
myfiles2=lappy(temp2,data.table::fread,fill=TRUE)#可选改进

名称(myfiles2)因为您已经在使用
data.table
,我建议使用
fread()
进行阅读。。 如果使用已收集的文件名命名结果列表,则可以使用
data.table::rbindlist()
-函数的
idcol
-参数在最终表中使用这些名称

library(data.table)

myfiles2 = lapply( temp2, data.table::fread, fill = TRUE) #optional improvement
names(myfiles2) <- basename(temp2)
data.table::rbindlist(myfiles2, use.names = TRUE, fill = TRUE, idcol = "phenotype")
库(data.table)
myfiles2=lappy(temp2,data.table::fread,fill=TRUE)#可选改进
名称(myfiles2)