在R中逐行读取.CSV

时间:2016-09-01 15:43:50

标签: r csv

我一直在尝试读取一个包含900多个变量的大型.CSV文件(2GB +)。我尝试了各种选项直接导入文件,但没有一个工作。

现在我试图通过逐行读取来导入.CSV文件。这意味着我使用skip选项并一次向主文件追加一行。我使用以下代码: -

data<-read.table(file_name,header=TRUE,nrows=1, skip=2,sep=",")

我面临的问题是,当我使用skip选项时,它不会读取标题,即使我已设置header = TRUE。

我错过了什么吗?任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:3)

这可以让您将大型CSV拆分为带有标题的块。

{key0:(sum of 0th elts), key1:(sum of 1st elts)...}

示例:

#' Split a large CSV file into separate files with \code{chunk_size} records per-file
#' 
#' @param path path to the large CSV file
#' @param template path template for saving out the smaller files. Uses \code{sprintf}.
#' @param chunk_size number of records per file
#' @param locale,na,quoted_na,comment,trim_ws passed on to \code{read_csv}
#' @examples
#' csv_split("largefile.csv", chunk_size=10000)
csv_split <- function(path, template="file%05d.csv", chunk_size=1000, 
                      locale=default_locale(), na=c("", "NA"), quoted_na=TRUE,
                      comment="", trim_ws=TRUE) {

  require(readr)

  path <- path.expand(path)

  csv_spec <- spec_csv(path)

  skip <- 0
  part <- 1

  repeat {

    df <- read_csv(path, col_names=names(csv_spec$cols), col_types=csv_spec,
                   locale=locale, na=na, quoted_na=quoted_na, comment=comment,
                   trim_ws=trim_ws, skip=skip, n_max=chunk_size)

    if (nrow(df) == 0) break

    cat(sprintf("Writing [%s]...\n", sprintf(template, part)))
    write_csv(df, sprintf(template, part))

    part <- part + 1
    skip <- skip + chunk_size

  }

}

这个[可以]应该被修改以处理具有library(readr) df <- data.frame(name=sample(LETTERS, 1000000, replace=TRUE), age=sample(30:100, 1000000, replace=TRUE)) write_csv(df, "allinone.csv") csv_split("allinone.csv", chunk_size=50000) ## Writing [file00001.csv]... ## Writing [file00002.csv]... ## Writing [file00003.csv]... ## Writing [file00004.csv]... ## Writing [file00005.csv]... ## Writing [file00006.csv]... ## Writing [file00007.csv]... ## Writing [file00008.csv]... ## Writing [file00009.csv]... ## Writing [file00010.csv]... ## Writing [file00011.csv]... ## Writing [file00012.csv]... ## Writing [file00013.csv]... ## Writing [file00014.csv]... ## Writing [file00015.csv]... ## Writing [file00016.csv]... ## Writing [file00017.csv]... ## Writing [file00018.csv]... ## Writing [file00019.csv]... ## Writing [file00020.csv]... ## Writing [file00021.csv]... - 1记录的第一个文件的边缘情况以及存在注释行的可能性。

如果您不将其用于实际拆分,则至少需要获取/使用列标题的示例代码。