使用R的data.table:在文件夹中使用fread读取所有.csv文件并跳过每个文件的最后一行。
使用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日
有些晚了,但是这是我的解决方法:
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
指的是你要查看的目录。我假设所有读取的文件名称相似,如果不是,你可以使用names
为bigdata
定义新名称。希望这可以帮到你!