You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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能正确识别列数,但仍报错,请问我应该换其他方法读取这个文件吗?

解决建议
  1. 优先排查编码问题
    错误提示里的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"))
    
  2. 用read_delim()手动控制格式
    read_csv2默认用分号做分隔符,你的文件可能是逗号分隔但小数位用逗号,直接手动指定规则避免自动识别错误:

    Mydata <- read_delim("P:/Projects/Project/Data_folder/mydata/mydata.csv", 
                         delim = ",", 
                         locale = locale(decimal_mark = ",", grouping_mark = "."))
    
  3. 优化大文件读取方式
    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 = ","))
    
  4. 定位具体解析错误
    如果能读取部分数据,执行problems(Mydata)查看具体哪一行哪一列出现问题,针对性清理脏数据。

内容的提问来源于stack exchange,提问作者Espejito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:32:20