在r中使用fread读取逗号分隔的csv文件,其中的字段包含逗号

在r中使用fread读取逗号分隔的csv文件,其中的字段包含逗号,r,csv,data.table,fread,comma,R,Csv,Data.table,Fread,Comma,我有一个用逗号分隔的csv文件。但是,有些字段包含逗号,如公司名称“Apple,Inc”,这些字段将分为两列,这导致使用fread时出现以下错误 “在第5行提前停止。预期有26个字段,但找到27个。” 关于如何正确加载此文件有何建议?提前谢谢 加: 示例行如下所示。似乎有些字段使用逗号而不使用引号。但字段中逗号后有空格 100,Microsoft,azure.com 300,IBM,ibm.com 500,Google,google.com 100,Amazon, Inc,amazon.com

我有一个用逗号分隔的csv文件。但是,有些字段包含逗号,如公司名称“Apple,Inc”,这些字段将分为两列,这导致使用fread时出现以下错误

“在第5行提前停止。预期有26个字段,但找到27个。”

关于如何正确加载此文件有何建议?提前谢谢

加:

示例行如下所示。似乎有些字段使用逗号而不使用引号。但字段中逗号后有空格

100,Microsoft,azure.com
300,IBM,ibm.com
500,Google,google.com
100,Amazon, Inc,amazon.com
400,"SAP, Inc",sap.com

对我来说很好。你能提供一个可复制的例子吗

库(data.table)
#创建示例并写出
df_out1)使用在注释末尾创建的测试文件,并假设文件中没有分号(如果有,请使用其他字符),将第一个和最后一个逗号替换为分号,然后将其作为分号分隔的文件读取

L <- readLines("firms.csv")
read.table(text = sub(",(.*),", ";\\1;", L), sep = ";")
##    V1          V2         V3
## 1 100   Microsoft  azure.com
## 2 300         IBM    ibm.com
## 3 500      Google google.com
## 4 100 Amazon, Inc amazon.com
## 5 400    SAP, Inc    sap.com
L <- readLines("firms.csv")
read.table(text = chartr(",;", ";,", gsub(", ", "; ", L)), sep = ";")
##    V1          V2         V3
## 1 100   Microsoft  azure.com
## 2 300         IBM    ibm.com
## 3 500      Google google.com
## 4 100 Amazon, Inc amazon.com
## 5 400    SAP, Inc    sap.com

行如果字段不受某种引号保护,那么您就有点麻烦了,除非您可以利用其他结构。。。您能否发布一个简短/可复制的示例(例如,作为代码格式的文本块)?文件有多大(这将决定各种破解/解决方法的实用性)?谢谢Ben!字段中的逗号后跟空格。这个文件不是很大。我想我可能需要将列分隔符改为分号。如果有字段没有带逗号的引号(
Amazon,Inc
),您怎么知道它们应该是一个字段?如果你想根据空格调整它们,你需要使用
readLines
读取它们,并进行一些文本处理。如果更改分隔符是一个(目前为止)最简单的选项…谢谢AdamK!有些字段没有引号,但里面有逗号。这应该是错误消息的问题。是。警告消息:在fread(“~/Desktop/fread_sample.txt”,header=F)中:在第4行提前停止。应为3个字段,但找到4个。考虑填充=真和注释.char =。第一个丢弃的非空行:
L <- readLines("firms.csv")
read.table(text = chartr(",;", ";,", gsub(", ", "; ", L)), sep = ";")
##    V1          V2         V3
## 1 100   Microsoft  azure.com
## 2 300         IBM    ibm.com
## 3 500      Google google.com
## 4 100 Amazon, Inc amazon.com
## 5 400    SAP, Inc    sap.com
which(count.fields("firms.csv", sep = ",") != 3)
## [1] 4
Lines <- '100,Microsoft,azure.com
300,IBM,ibm.com
500,Google,google.com
100,Amazon, Inc,amazon.com
400,"SAP, Inc",sap.com
'
cat(Lines, file = "firms.csv")