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

关于data.table::fread处理嵌入式引号的技术求助

解决R中fread导入CSV时双引号转义异常的问题

问题场景

使用data.table::fread导入CSV文件时,出现双引号转义不符合预期的情况:

  • CSV中的原始字段内容:

    ...,"TIRE WAS FOUND ""DEFLATED"", SUGGESTING FAILURE",...

  • 导入后显示结果:

    TIRE WAS FOUND ""DEFLATED"", SUGGESTING FAILURE

  • 预期结果(数据库原始值):

    TIRE WAS FOUND "DEFLATED", SUGGESTING FAILURE

使用的R代码:

cur01 <- data.table::fread(base::paste0(newdata, "incidents.csv"), 
                       encoding = "unknown",
                       sep = ",",
                       dec = ".",
                       quote = "\"",
                       nrows = Inf,
                       skip = 0,
                       header = TRUE,
                       stringsAsFactors = FALSE,
                       data.table = FALSE,
                       showProgress = TRUE,
                       nThread = parallel::detectCores())

环境说明:R版本4.3.1,data.table版本1.14.8

解决建议

  • 关闭fread引号解析后手动替换
    先禁用fread的引号解析功能,再通过字符串替换把连续的两个双引号转为单个:

    cur01 <- data.table::fread(base::paste0(newdata, "incidents.csv"), 
                           encoding = "unknown",
                           sep = ",",
                           dec = ".",
                           quote = "",  # 关闭引号解析
                           nrows = Inf,
                           skip = 0,
                           header = TRUE,
                           stringsAsFactors = FALSE,
                           data.table = FALSE,
                           showProgress = TRUE,
                           nThread = parallel::detectCores())
    # 替换所有连续双引号为单个
    cur01$target_column <- gsub('""', '"', cur01$target_column)
    
  • 改用read.csv并设置转义参数
    如果fread的处理逻辑不适用,换用基础包的read.csv,指定双引号作为自身的转义字符:

    cur01 <- read.csv(base::paste0(newdata, "incidents.csv"),
                      encoding = "unknown",
                      sep = ",",
                      dec = ".",
                      quote = "\"",
                      escape = "\"",  # 用双引号转义自身
                      stringsAsFactors = FALSE)
    
  • 检查数据库导出规则
    数据库导出CSV时,部分系统会把单个双引号转义为两个(符合CSV标准),如果想从源头解决,可以调整数据库导出CSV的转义设置,让输出的双引号格式直接匹配预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:22:44