由于read_csv在读取简单干净的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?
答案 0 :(得分:0)
感谢MrFlick对我的问题给予答复:
read_csv
比read.csv
更快的全部原因是因为它可以对您的数据进行假设。它查看前1000行以猜测列类型(通过guess_max
),但是如果列中没有数据,则无法猜测该列中的内容。由于您似乎知道这些列中应该包含的内容,因此应该使用col_types=
参数来告诉read_csv
期望什么,而不要猜测。请访问?readr::cols
帮助页面,以了解如何告诉read_csv
它需要知道什么。
guess_max = Inf
也解决了这个问题,但是read_csv的速度优势似乎已经丧失。