我有多个文本文件(大约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))
答案 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)