如何读取R中的多个csv文件,并使用fread函数跳过最后一行

我想使用fread函数" title="fread函数">fread函数读取多个文件(csv)。但最后一行我有不必要的数据,我无法使用fread,因为它会抛出一个错误。如何读取R中的多个csv文件,并使用fread函数跳过最后一行

代码:

library(data.table)  

fnames <- list.files("Path",pattern = "^.*Star.*.csv$",full=TRUE)

read_data <- function(z){

dat <- fread(z, verbose = TRUE, nrow= -1)

}

datalist <- lapply(fnames, fread)

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

错误:收卷过程中

错误:预期SEP( ''),但新的线,EOF(或其他非打印字符)从检测类型时结束字段4点10:2704,IE,N,ENDOFFILEMARKER,5397786

我在每个文件的最后有一行数据ENDOFFILEMARKER。

注:


  • 我需要用FREAD为每个数据文件的大小约为700 MB。


回答:

没有看到您的CSV文件,所以很难确定最佳答案。也许尝试使用fread首先阅读一个文件。使用这样的事情可能工作:

dat <- fread("grep -v ENDOFFILEMARKER filename.csv") 

其中filename.csv是放在你的工作目录中的文件之一的名称。 -v使grep返回除包含字符串ENDOFFILEMARKER的行之外的所有行。如果你可以使用一个文件来处理它,那么你可以使用lapply来对所有文件应用类似的逻辑。

另一个对我有用的选项是使用readLines函数。缺点是readLines函数有点慢。但是,如果你无法找到另一种方式,那么readLines将起作用。下面是我基本上是如何使用的一个文件:

length_a <- length(readLines("filename.csv")) 

dt <- fread("filename.csv", nrows = length_a-1)

一旦你有工作的一个文件,然后你可以弄清楚如何与您的所有文件循环使用。

据我所知,fread("head -n -1 filename.csv")是跳过最后一行的普遍接受的方法,但我从来没有能够得到它正常工作。

编辑:如果您使用的是Windows,这可能会为你工作:

dat <- fread('findstr /V /C:"ENDOFFILEMARKER" filename.csv') 

grep的效果很好,如果你使用的是Linux或安装了Windows计算机上的Linux工具。如果您使用Windows,findstr命令与Linux中的grep命令类似。/V返回除ENDOFFILEMARKER行之外的所有行。/C:“......”允许精确地匹配多个单词,包括空格或只是一个单词。

以上是 如何读取R中的多个csv文件,并使用fread函数跳过最后一行 的全部内容, 来源链接: utcz.com/qa/266690.html

回到顶部