r - 使用 Fread 读取带有双引号和逗号的字段时出错

标签 r data.table

我有一个包含 19 列字符/数字数据的大型 csv 文件。

运行 fread 时,我收到一条错误消息,指出我的数字列之一正在转换为字符,因为该字段的值为 ""。然后我在文本编辑器中打开我的数据,找到了问题的根源。在一行中,字符列显示为:

“”“ parent ””、““Y.M.””和““期待””

对应的字符串:

“ parent ”、“Y.M.”和“期待中”

作为:

  • 第一个引号是字符串保护符
  • 第2至第6对引号为单引号
  • 最后一个引号是字符串保护器的结尾。

据我之前所见,fread 会读取将 "" 转换为 \" 的过程。这种情况下的问题是该字符串还包含逗号。这些被解释为定界符,这打乱了我的列顺序并将后面的字符列插入我的数字字段。

有什么办法可以阻止这种情况,还是我应该使用其他软件包?

注意:我四处寻找解决方案,感觉 "" + fread 是令人沮丧的根源,但还没有看到添加逗号复杂性的示例。

重现:

将以下内容放入一个txt文件中:

"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S"
"168263291","Gruner & Jahr Printing and Publishing Company","Parents Ym and Expecting","""PARENTS"", ""Y.M."", AND ""EXPECTING""",0,0,3,"73130201","055302756","Quad/Graphics Inc.","013034588","02","093671063","000000000","Unclassified","94133","San Francisco","CALIFORNIA","UNITED STATES"

读取数据:

DT <- fread("myfile.csv",colClasses = c(rep("Character",5),
                                        rep("numeric",2),
                                        rep("character",12))
            ,sep = ",")

最佳答案

在当前开发 v1.9.5 中对 fread() 进行了最近的修复,这就是我得到的:

require(data.table) #v1.9.5+
fread('A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S
"168263291","Gruner & Jahr Printing and Publishing Company","Parents Ym and Expecting","""PARENTS"", ""Y.M."", AND ""EXPECTING""",0,0,3,"73130201","055302756","Quad/Graphics Inc.","013034588","02","093671063","000000000","Unclassified","94133","San Francisco","CALIFORNIA","UNITED STATES"')

#            A                                             B                        C
# 1: 168263291 Gruner & Jahr Printing and Publishing Company Parents Ym and Expecting
                                          D E F G        H         I
# 1: ""PARENTS"", ""Y.M."", AND ""EXPECTING"" 0 0 3 73130201 055302756
                    J         K  L         M         N            O     P
# 1: Quad/Graphics Inc. 013034588 02 093671063 000000000 Unclassified 94133
               Q          R             S
# 1: San Francisco CALIFORNIA UNITED STATES

fread() 更稳健地处理嵌入引号,默认去除空格(新的 strip.white 参数,默认值=TRUE),并且还获得了 encoding 参数。请参阅项目页面上的 README 以获取最新消息。

如果您的问题仍未解决(在此处或在项目页面上),请通过可重现的示例告诉我们。

关于r - 使用 Fread 读取带有双引号和逗号的字段时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30515673/

相关文章:

r - 何时使用训练验证测试集

r - 如何从 R 的 cor() 的相关分析中计算 P 值和标准误差

r - 在列表的列表中连接数据

python - Pandas /matplotlib : faceting bar plots

r - 如何在R中的传单 map 上绘制多个等时线

data.table 中的逐行操作和更新

R中巨大矩阵的重新编码

r - 如何按顺序逐行更新

r - data.table 在只有一行时添加列表作为列

r - 获取元素随机从另一个表B取数据表