如何在阅读多个文本文件时将文件名的一部分转换为变量?

时间:2015-12-16 13:54:27

标签: r

我有多个文本文件(大约60个),我合并到一个文件中。我正在寻找只在每个文件的变量中添加文件名的前4位数的方法。文件名的示例是1111_2222_3333.txt

所以基本上我需要一个额外的变量,包括每个文件的文件名的前4位数。

我确实找到了以下相关主题,但这不允许我仅包含4个四位数字: How can I turn the filename into a variable when reading multiple csvs into R

R: Read multiple files and label them based on the file name

我目前尚未包含文件名的代码:

files <- list.files("pathname", pattern="*.TXT")
masterfilesales <- do.call(rbind, lapply(files, read.table))

2 个答案:

答案 0 :(得分:2)

更新虽然初始答案是正确的,但sapply使用simplify=FALSE代替lapply,可以通过更少的步骤实现相同的目标,因为{ {1}}自动将文件名分配给列表中的元素:

sapply

旧答案:要实现您的目标,您可以结合使用library(data.table) files <- list.files("pathname", pattern="*.TXT") file.list <- sapply(files, read.table, simplify=FALSE) masterfilesales <- rbindlist(file.list, idcol="id")[, id := substr(id,1,4)] 函数和setattr函数的idcol参数rbindlist - 包装如下:

data.table

或者,您可以使用以下命令在基本R中设置文件名:

library(data.table)

files <- list.files("pathname", pattern="*.TXT")
file.list <- lapply(files, read.table)
setattr(file.list, "names", files)
masterfilesales <- rbindlist(file.list, idcol="id")[, id := substr(id,1,4)]

或:

attr(file.list, "names") <- files

并使用names(file.list) <- files 包中的bind_rows将它们绑定在一起(其中还包含dplyr参数以创建id列:

.id

答案 1 :(得分:0)

你在找这样的东西吗?

c("1111_444.txt", "443343iqueh.txt") -> a

substring(a, first=1, last=4)