r data.table readcsv文件增加列数量

时间:2017-03-21 12:44:51

标签: r dataset large-data

我遇到的问题是,我正在尝试从csv文件中读取大量数据(可能大约有8000万行分成大约200个文件)

某些文件结构不合理。在几十万行之后,由于某种原因,行以逗号(“,”)结尾,但此逗号后面没有其他信息。举例说明此行为:

a,b,c
1,2,3
d,e,f,
4,5,6,

行有19列。我尝试手动告诉readcsv将其读取为20列,使用colClasses和col.names并填充= TRUE

all.files <- list.files(getwd(), full.names=T, recursive=T)

lapply(all.files, fread,
  select=c(5,6,9),
  col.names=paste0("V",seq_len(20)),
  #colClasses=c("V1"="character","V2"="character","V3"="integer"),
  colClasses=c(<all 20 data types, 20th arbitrarily as integer>),
  fill=T)

我尝试的另一种解决方法是完全不使用fread,通过执行

data <- lapply(all.files, readLines)
data <- unlist(data)
data <- as.data.table(tstrsplit(data,","))
data <- data[, c("V5","V6","V9"), with=F]

然而,这种方法导致“错误:内存耗尽”,我认为实际上只能通过读取所需的3列而不是全部19列来解决。

非常感谢任何关于如何在这种情况下使用fread的提示。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用readr::read_csv,如下所示:

library(readr)

txt <- "a,b,c
1,2,3
d,e,f,
4,5,6,"

read_csv(txt)

产生预期结果:

# A tibble: 3 × 3
      a     b     c
  <chr> <chr> <chr>
1     1     2     3
2     d     e     f
3     4     5     6

以下警告

Warning: 2 parsing failures.
row col  expected    actual
  2  -- 3 columns 4 columns
  3  -- 3 columns 4 columns

要仅读取特定列,请使用cols_only,如下所示:

read_csv(txt, 
         col_types = cols_only(a = col_character(),
                               c = col_character()))