【问题标题】:Read CSV file with escape characters in R在 R 中读取带有转义字符的 CSV 文件
【发布时间】:2018-05-27 22:12:52
【问题描述】:

我有一个带有反斜杠的 CSV 文件来转义某些逗号,如下所示:

c389c3d0-1175-465f-b2bb-1070f24d17a6,eccbc87e4b5ce2fe28308fd9f2a7baf3,{"parsed_query":{"qty":"2"\,"unit":null\,"brand":null\,"food":"apples"}\,"accuracy":"yellow"},apples,NULL,NULL,g,189.28,0.62,0.10,0.00,3.64,50.27,8.74,37.82,0.95,389.48,40.04,2015-10-19 21:24:49,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL
5df13606-1f78-491f-a4b2-d104f82d030f,c81e728d9d4c2f636f067f89cc14862c,{"parsed_query":{"qty":"2"\,"unit":null\,"brand":null\,"food":"oranges"}\,"accuracy":"yellow"},oranges,NULL,NULL,g,137.20,0.42,0.05,0.00,2.80,35.11,6.16,23.80,2.55,464.80,64.40,2015-10-19 21:24:49,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL

我正在尝试将文件读入 R,但收到以下错误:

read.table 中的错误(文件 = 文件,标题 = 标题,sep = sep,quote = quote,: 列多于列名

有谁知道如何让 R 将反斜杠读取为转义字符?提前致谢!

【问题讨论】:

  • 我会在 Masoud 的链接中使用 krlmrl 的答案,只需将 \, 替换为其他一些独特的字符,然后 read.csv 应该可以正常工作。然后您可以将它们切换回逗号。或者,如果您不喜欢命令行工具,请使用readLines 将每一行作为一个整体读取并在 R 中进行替换。

标签: r csv


【解决方案1】:

如果您不想弄乱有人错误地卡在 CSV 记录中间的 JSON blob,您还可以执行以下操作。它有点重量级,但它可以解决粗糙的中场 JSON blob 而不会打扰它们:

library(stringi)
library(tidyverse)

stri_read_lines("~/Desktop/a.csv") %>%
  map_df(~{

    m1 <- stri_match_first_regex(.x, "^([[:alnum:]-\\:, \\.]+)\\{")[,2]
    m2 <- stri_match_last_regex(.x, "\\}([[:alnum:]-\\:, \\.]+)")[,2]

    c(
      stri_split_fixed(m1, ",", simplify=TRUE)[,-1],
      stri_replace_first_fixed(.x, m1, "") %>% stri_replace_last_fixed(m2, ""),
      stri_split_fixed(m2, ",", simplify=TRUE)[,-1]
    ) %>% 
      as.list() %>%
      set_names(~sprintf("X%d", 1:length(.x)))

  }) %>% 
  glimpse()
## Observations: 2
## Variables: 32
## $ X1  <chr> "eccbc87e4b5ce2fe28308fd9f2a7baf3", "c81e728d9d4c2f636f067f89cc14862c"
## $ X2  <chr> "", ""
## $ X3  <chr> "{\"parsed_query\":{\"qty\":\"2\"\\,\"unit\":null\\,\"brand\":null\\,\"food\":\"apples\"}\\,\"accuracy\":\"yellow\"}", "{\"parsed_query\":{\...
## $ X4  <chr> "apples", "oranges"
## $ X5  <chr> "NULL", "NULL"
## $ X6  <chr> "NULL", "NULL"
## $ X7  <chr> "g", "g"
## $ X8  <chr> "189.28", "137.20"
## $ X9  <chr> "0.62", "0.42"
## $ X10 <chr> "0.10", "0.05"
## $ X11 <chr> "0.00", "0.00"
## $ X12 <chr> "3.64", "2.80"
## $ X13 <chr> "50.27", "35.11"
## $ X14 <chr> "8.74", "6.16"
## $ X15 <chr> "37.82", "23.80"
## $ X16 <chr> "0.95", "2.55"
## $ X17 <chr> "389.48", "464.80"
## $ X18 <chr> "40.04", "64.40"
## $ X19 <chr> "2015-10-19 21:24:49", "2015-10-19 21:24:49"
## $ X20 <chr> "NULL", "NULL"
## $ X21 <chr> "NULL", "NULL"
## $ X22 <chr> "NULL", "NULL"
## $ X23 <chr> "NULL", "NULL"
## $ X24 <chr> "NULL", "NULL"
## $ X25 <chr> "NULL", "NULL"
## $ X26 <chr> "NULL", "NULL"
## $ X27 <chr> "NULL", "NULL"
## $ X28 <chr> "0", "0"
## $ X29 <chr> "NULL", "NULL"
## $ X30 <chr> "NULL", "NULL"
## $ X31 <chr> "NULL", "NULL"
## $ X32 <chr> "NULL", "NULL"

【讨论】:

    猜你喜欢
    • 2015-12-11
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2021-03-16
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多