如何读取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