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

使用R读取含格式问题的CSV文件时出现数据丢失与错位问题求助

解决带格式错误的分号分隔CSV文件读取问题

你的核心问题是CSV文件违反了标准规范:部分单元格内的未转义双引号和引用内的分号导致readr::read_csv2无法正确解析,要么误判行结构丢数据,要么关闭引用后列错位。以下是两种实用解决方案:

方案1:用data.table::fread直接读取(推荐)

fread对不规范CSV的容错性远强于readr系列函数,能自动识别引用范围内的分号,同时处理未转义的双引号:

# 加载包
library(data.table)
library(tibble)

# 读取文件
dt <- fread("my_file.csv", sep = ";", quote = "\"")

# 转成你需要的tibble格式
as_tibble(dt)

读取后如果需要将X3列的双引号转成带反斜杠的格式,可追加处理:

dt$X3 <- gsub('"', '\\"', dt$X3)

方案2:预处理文本修复格式后用readr读取

如果坚持使用readr,可以先修复文件中的格式错误(把单个双引号转成标准CSV的双引号转义),再读取:

library(readr)

# 读取所有行文本
lines <- read_lines("my_file.csv")

# 正则修复:将双引号包裹内容里的单个"替换成""(标准CSV转义规则)
fixed_lines <- gsub('(?<="[^"])"(?=[^"]")', '""', lines, perl = TRUE)

# 读取修复后的文本
df <- read_csv2(I(fixed_lines))

# 按需将X3转为带反斜杠转义的格式
df$X3 <- paste0('"', gsub('"', '\\"', df$X3), '"')

两种方法都能处理你示例中的问题,对于13k行的文件,fread的效率会更高,且无需手动写正则修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:47:42