r data.table readcsv 文件增加列数量
r data.table readcsv file increases column amount
我有一个问题,我正在尝试从 csv 文件中读取大量数据(大约 8000 万行分成大约 200 个文件)
有些文件结构不合理。在几十万行之后,由于某种原因,这些行以逗号(“,”)结尾,但这个逗号后面没有附加信息。一个简短的例子来说明这种行为:
a,b,c
1,2,3
d,e,f,
4,5,6,
这些行有 19 列。我尝试使用 colClasses 和 col.names 和 fill=TRUE
手动告诉 readcsv 将其读取为 20 列
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]
但是,这种方法会导致 "Error: memory exhausted",我相信这可以通过实际只读取所需的 3 列而不是全部 19 列来解决。
非常感谢任何关于如何在这种情况下使用 fread 的提示。
您可以尝试使用 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()))
我有一个问题,我正在尝试从 csv 文件中读取大量数据(大约 8000 万行分成大约 200 个文件)
有些文件结构不合理。在几十万行之后,由于某种原因,这些行以逗号(“,”)结尾,但这个逗号后面没有附加信息。一个简短的例子来说明这种行为:
a,b,c
1,2,3
d,e,f,
4,5,6,
这些行有 19 列。我尝试使用 colClasses 和 col.names 和 fill=TRUE
手动告诉 readcsv 将其读取为 20 列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]
但是,这种方法会导致 "Error: memory exhausted",我相信这可以通过实际只读取所需的 3 列而不是全部 19 列来解决。
非常感谢任何关于如何在这种情况下使用 fread 的提示。
您可以尝试使用 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()))