R data.table:在文件夹中的所有.csv文件上使用fread跳过每个文件的最后一行

R data.table: using fread on all .csv files in folder skipping the last line of each

我有数百个.csv文件需要使用fread读取并另存为一个数据表。每个.csv的基本结构都相同。有需要跳过的头信息(使用skip=很容易)。我很难跳过每个.csv文件的最后一行。每个.csv文件的行数不同。

如果测试文件夹中只有一个文件,则此脚本将完美地跳过第一行(使用skip=)和最后一行(使用nrows=):

1
2
3
file <- list.files("Q:/Test/", full.names=TRUE)
all <- fread(file, skip = 7, select = c(1:7,9),
             nrows = length(readLines(file))-9)

在测试文件夹中保存多个文件时,这是我尝试的代码:

1
2
3
4
file <- list.files("Q:/Test/", full.names=TRUE)
L <- lapply(file, fread, skip = 7, select = c(1:7,9),
        nrows = length(readLines(file))-9)
dt <- rbindlist(L)

它不会创建l,并给出以下错误:

1
Error in file(con,"r") : invalid 'description' argument

当每个.csv的行数不同时,对于如何跳过每个.csv的最后一行有什么想法?

我使用的是data.table版本1.9.6。谢谢。


现在有点晚了,但我的工作是:

1
2
3
4
5
6
7
8
9
10
fnames <- dir("path", pattern ="csv")

read_data <- function(z){
  dat <- fread(z, skip = 1, select = 1)
  return(dat[1:(nrow(dat)-1),])
}

datalist <- lapply(fnames, read_data)

bigdata <- rbindlist(datalist, use.names = TRUE)

这里,path指的是您正在查找的目录。我假设所有读取文件的名称都相似,如果不是,您可以使用namesbigdata定义一个新名称。希望这有帮助!