问题描述
我正在阅读几千个 csv 文件,其中一些列的格式非常“有趣”:{""Q0"":""double double quote""}
似乎 read.csv
读起来不错,但 read_csv
和 fread
都在做不同的事情(见下文)。我的期望是:{"Q0":"double double quote"}
# Content of csv file
# "numbers","simple_quote","double_quote"
# "9","quoted text","{""Q0"":""double double quote""}"
library(readr)
library(data.table)
read.csv("test.csv")
#> numbers simple_quote double_quote
#> 1 9 quoted text {"Q0":"double double quote"}
read_csv("test.csv")
#> # A tibble: 1 x 3
#> numbers simple_quote double_quote
#> <dbl> <chr> <chr>
#> 1 9 quoted text "{\"Q0\":\"double double quote\"}"
fread("test.csv")
#> numbers simple_quote double_quote
#> 1: 9 quoted text {""Q0"":""double double quote""}
由 reprex package (v2.0.0) 于 2021 年 4 月 9 日创建
解决方法
只是为了将@MrFlick 和@r2evans 的评论合并到一个回复中,并按照@jens-piegsa 的建议包含我的最终解决方法。
这似乎是一个错误,至少在 data.table 前面:
- https://github.com/Rdatatable/data.table/issues/1109
- https://github.com/Rdatatable/data.table/issues/4779
在我的用例中,data.table 的速度优势是巨大的,所以我添加了一个 gsub() 步骤来处理双引号。
DF %>% mutate(stimulus = gsub('\\{""Q0"":""|""\\}','',stimulus))