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

9 浏览
0 Comments

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

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

如果Test文件夹中只有一个文件,则使用skip = 完美地跳过第一行(使用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。 谢谢。

admin 更改状态以发布 2023年5月22日
0
0 Comments

有些晚了,但是这是我的解决方法:

library(data.table)
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定义新名称。希望这可以帮到你!

0