read_csv(readr,R)如果第一个 NA 中有 NA 1000 + x 在简单干净的 csv(解析失败)中,则



我刚刚经历了一个巨大的头痛,因为在阅读简单干净的 csv 文件时,read_csv用 NA 替换内容来弄乱我的数据。

我正在迭代多个大型 csv 文件,这些文件加起来有数百万个观察结果。对于某些变量,某些列包含相当多的 NA。

当读取前 1000 + x 个观测值在某一列中包含 NA 的 csv 时,read_csv 会用 NA 填充整个列,因此,数据将丢失以进行进一步的操作。

显示警告消息"警告:x 解析失败",但由于我正在读取多个文件,因此无法逐个文件检查此文件。不过,我不知道对问题(x)指示的解析问题的自动修复

使用read.csv 而不是 read_csv 不会导致问题,但它很慢,而且我遇到了编码问题(使用不同的编码需要太多内存来处理大文件)。

克服此错误的一个选项是向数据添加第一个观察值(第一行),其中包含每列的内容,但我仍然需要先以某种方式读取文件。

请参阅下面的简化示例:

##create a dtafrane
df <- data.frame( id = numeric(), string = character(), 
stringsAsFactors=FALSE)
##poluate columns
df[1:1500,1] <- seq(1:1500)
df[1500,2] <- "something" 
# variable string contains the first value in obs. 1500 
df[1500,]
## check the numbers of NA in variable string
sum(is.na(df$string))   # 1499
##write the df
write_csv(df, "df.csv")
##read the df with read_csv and read.csv
df_readr <- read_csv('df.csv')
df_read_standard <- read.csv('df.csv')
##check the number of NA in variable string
sum(is.na(df_readr$string))  #1500
sum(is.na(df_read_standard$string))  #1499
## the read_csv files is all NA for variable string
problems(df_readr) ##What should that tell me? How to fix it?

感谢Flick先生对我的问题给出的回答评论:

read_csvread.csv更快的全部原因是因为它可以对您的数据做出假设。它查看前 1000 行以猜测列类型(通过guess_max),但如果列中没有数据,则无法猜测该列中的内容。由于您似乎知道列中应该包含的内容,因此您应该使用col_types=参数来告诉read_csv会发生什么,而不是猜测。请参阅?readr::cols帮助页面,了解如何告诉read_csv它需要知道什么。

同样guess_max = Inf克服了这个问题,但read_csv的速度优势似乎失去了。

最新更新