gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:17:24 29 4
gpt4 key购买 nike

我正在尝试使用 fread 函数读取多个文件 (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(或其他非打印字符)在从点 10 检测类型时结束字段 4: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')

    如果您使用 Linux 或在您的 Windows 机器上安装了 Linux 工具,grep 可以很好地工作。如果您使用的是 Windows,则 findstr 命令类似于 Linux 中的 grep 命令。/V 返回除包含 ENDOFFILEMARKER 的行之外的所有行。/C:"... ..."允许匹配多个单词,包括空格或仅匹配一个单词。

    关于r - 如何在R中读取多个csv文件并使用fread函数跳过最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47996447/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com