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

时间:2016-04-11 20:16:49

标签: r data.table

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

如果我在Test文件夹中只有一个文件,这个脚本完全跳过第一行(使用skip =)和最后一行(使用nrows =):

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

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

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并给我这个错误:

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

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

我正在使用data.table版本1.9.6。感谢。

1 个答案:

答案 0 :(得分:2)

有点晚了,但这对我有用:

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指的是您正在查看的目录。我假设所有阅读文件的名称都相似,如果没有,您可以随时使用bigdatanames定义新名称。希望这可以帮助!