导入文件夹中的所有txt文件,连接到数据框,在R中使用文件名作为变量?

Ros*_*920 7 import for-loop r append

我有一个包含142个制表符分隔文本文件的文件夹.每个文件有19个变量,然后是下面的一些行(通常不超过30行,但它会有所不同).我想自动在R中使用这些文件做几件事,我似乎无法得到我想要的代码.我是循环的新手,我从stackoverflow的以前的帖子中得到了两段代码,但似乎无法弄清楚如何组合它们的函数.

  1. 我想在将文件读入R时将文件名转换为变量,以便每行都有标识文件名

  2. 将所有文件(带有文件名变量和无标题)连接到一个尺寸为Yx19的数据框中,其中Y =但是有很多结果行.

我可以使用以下代码创建142个数据帧的列表:

myFiles = list.files(path="~/Documents/ForR/", pattern="*.txt")
data <- lapply(myFiles, read.table, sep="\t", header=FALSE)
names(data) <- myFiles
    for(i in myFiles) 
    data[[i]]$Source = i
    do.call(rbind, data)
Run Code Online (Sandbox Code Playgroud)

我能够用19个变量创建我想要的数据帧,但文件名不存在:

files <- list.files(path="~/Documents/ForR/.", pattern=".txt")
    DF <- NULL
        for (f in files) {
        dat <- read.csv(f, header=F, sep="\t", na.strings="", colClasses="character")
        DF <- rbind(DF, dat)
    }
Run Code Online (Sandbox Code Playgroud)

如何将文件名(如果可能,不带.txt)作为变量添加到循环中?

Jer*_*myS 8

添加到循环dat $ file < - unlist(strsplit(f,split =".",fixed = T))[1]

files <- list.files(path="~/Documents/ForR/.", pattern=".txt")
    DF <- NULL
        for (f in files) {
        dat <- read.csv(f, header=F, sep="\t", na.strings="", colClasses="character")
        dat$file <- unlist(strsplit(f,split=".",fixed=T))[1]
        DF <- rbind(DF, dat)
    }
Run Code Online (Sandbox Code Playgroud)

do.call中的row.names不应该是格式名称(列表)[n] .i,其中i是1:number_of_rows_for_data.frame n?所以你可以从row.names中创建一个列

data <- lapply(myFiles, read.table, sep="\t", header=FALSE)
combined.data <- do.call(rbind, data)
combined.data$file_origin <- row.names(combined.data)
Run Code Online (Sandbox Code Playgroud)