【问题标题】:Import big CSV files at once in R在 R 中一次导入大的 CSV 文件
【发布时间】:2019-03-24 13:43:27
【问题描述】:

我在一个文件夹中有 70 个具有相同列的 csv 文件,每个文件大小为 0.5 GB。 我想将它们导入到 R 中的单个数据框中。

通常我如下正确导入它们:

df <- read_delim("file.csv", 
"|", escape_double = FALSE, col_types = cols(pc_no = col_character(), 
    id_key = col_character()), trim_ws = TRUE)

要导入所有这些,像这样编码并且错误如下: 缺少参数“delim”,没有默认值

tbl <-
list.files(pattern = "*.csv") %>% 
map_df(~read_delim("|", escape_double = FALSE, col_types = cols(pc_no = col_character(), id_key = col_character()), trim_ws = TRUE))

使用 read_csv,导入但仅显示一列,其中包含所有列和值。

 tbl <-
 list.files(pattern = "*.csv") %>% 
 map_df(~read_csv(., col_types = cols(.default = "c")))

【问题讨论】:

  • 那么read_delim 的第一个位置参数是file 而不是delim 所以也许你应该命名参数或者实际上将.x. 传递给第一个参数。
  • Kadir,您完全有权选择不接受您过去问题的任何答案。然而,接受一个答案不仅为回答者提供了一些积分,而且还为有类似问题的读者提供了一些关闭。你会考虑回到你之前的问题并接受每个问题吗? stackoverflow.com/help/someone-answers
  • 似乎其他人已经回答了您的直接问题,但我也鼓励您考虑 data.table 库中的 fread 函数。根据我的经验,fread 读取大文件的速度要快得多,您可以立即将其转换为 data.frame 以满足您的需求。

标签: r csv import readr


【解决方案1】:

在您的第二个代码块中,您缺少.,因此read_delim 将您的参数解释为read_delim(file="|", delim=&lt;nothing provided&gt;, ...)。试试:

tbl <- list.files(pattern = "*.csv") %>% 
  map_df(~ read_delim(., delim = "|", escape_double = FALSE,
                      col_types = cols(pc_no = col_character(), id_key = col_character()),
                      trim_ws = TRUE))

我在这里明确指出了delim=,但这并不是绝对必要的。但是,如果您在第一次尝试时就这样做了,您就会看到

readr::read_delim(delim = "|", escape_double = FALSE,
                  col_types = cols(pc_no = col_character(), id_key = col_character()),
                  trim_ws = TRUE)
# Error in read_delimited(file, tokenizer, col_names = col_names, col_types = col_types,  : 
#   argument "file" is missing, with no default

这更能说明实际问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 2013-01-29
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多