R Studio读取335.1MB CSV文件报错,求替代解决方案
问题描述
我有一个335.1MB的CSV文件,用R Studio读取时遇到问题,两种readr函数返回不同错误:
- 使用
read_csv时:
> Mydata <- read_csv("P:/Projects/Project/Data_folder/mydata/mydata.csv") Rows: 2068023 Columns: 1 Error in nchar(x, "width") : invalid multibyte string, element 1 In addition: Warning message: One or more parsing issues, see `problems()` for details
- 使用
read_csv2时:
> Mydata <- read_csv2("P:/Projects/Project/Data_folder/mydata/mydata.csv") i Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control. Rows: 2045785 Columns: 25 Error in nchar(x, "width") : invalid multibyte string, element 1 In addition: Warning message: One or more parsing issues, see `problems()` for details
read_csv2能正确识别列数,但仍报错,请问我应该换其他方法读取这个文件吗?
解决建议
优先排查编码问题
错误提示里的invalid multibyte string几乎都是编码不匹配导致的。可以先指定编码尝试读取,比如:# 先检测文件编码 readr::guess_encoding("P:/Projects/Project/Data_folder/mydata/mydata.csv") # 根据检测结果指定编码,比如UTF-8或GBK Mydata <- read_csv2("P:/Projects/Project/Data_folder/mydata/mydata.csv", locale = locale(encoding = "UTF-8"))用
read_delim()手动控制格式read_csv2默认用分号做分隔符,你的文件可能是逗号分隔但小数位用逗号,直接手动指定规则避免自动识别错误:Mydata <- read_delim("P:/Projects/Project/Data_folder/mydata/mydata.csv", delim = ",", locale = locale(decimal_mark = ",", grouping_mark = "."))优化大文件读取方式
335MB的文件虽不算超大,但如果内存紧张,可分块读取:# 按10万行分块读取 chunk_reader <- read_csv2("P:/Projects/Project/Data_folder/mydata/mydata.csv", chunk_size = 100000) Mydata <- data.frame() for(chunk in chunk_reader) { Mydata <- rbind(Mydata, chunk) }更高效的方式是用
vroom包,专门针对大CSV做了优化,速度快且内存占用低:install.packages("vroom") library(vroom) Mydata <- vroom("P:/Projects/Project/Data_folder/mydata/mydata.csv", delim = ",", locale = locale(decimal_mark = ","))定位具体解析错误
如果能读取部分数据,执行problems(Mydata)查看具体哪一行哪一列出现问题,针对性清理脏数据。
内容的提问来源于stack exchange,提问作者Espejito
相关产品推荐
相关产品推荐

