如何将包含单引号的 .csv 文件读入 R?

38

我在使用R语言读取包含撇号的 .txt 或 .csv 文件时遇到了困难。

我的一些列包含描述性文本,例如 "Attends to customers' needs" 或 "Sheriff's deputy"。我的文件在Excel中可以正确打开(即所有数据都出现在正确的单元格中;有3列和约8000行,没有丢失的数据)。但是当我要求R读取该文件时,会发生以下情况:

data <-read.table("datafile.csv", sep=",", header=TRUE)
  Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  line 520 did not have 3 elements

(第520行是第一行包含撇号的行。)

如果我手动删除所有的撇号,那么R就能正确读取.txt或.csv文件。但是,如果可能的话,我宁愿保留这些撇号。

我刚接触R,感激任何帮助。


我点赞是因为即使我基本上知道这个问题,但我曾经在读取数据采集机生成的csv文件时被“抓住了”。问题是,在一个相当大的标题块内,该文件有一些带有撇号的字段(这是一个意外情况)。有时候你必须仔细查看源文件中的垃圾内容。 - Carl Witthoft
3个回答

39

默认情况下,read.table 将单引号和双引号视为引用字符。您需要在 read.table 调用中添加 quote="\""。或者,您可以直接使用 read.csv,它默认只将双引号视为引用字符。


1
感谢您的帮助。有趣的是,我无法让您或DWin建议的任何read.table选项起作用...但是read.csv可以解决问题! - user1257313
read.csv的另一个不同之处在于,它的默认设置是fill = TRUE - IRTFM

9

认真研究?read.table中的选项将会在长期内得到回报。引用字符的默认值是quote = "\"'",实际上在R解析该表达式后只有两个字符,即单引号和双引号。您可以使用quotes=NA将它们从考虑范围中移除。有时还需要将默认值为“#”的'comment.char'删除,并且将'as.is'更改为TRUE可以防止字符串被转换为因子。


5
我认为现在应该将quotes=NA更改为quote=NULL,这是最新版本的要求。 - JayCo
我遇到了同样的问题,但是尝试导入一个列表,其中包含必须保留在导入列表中的引号。对我而言,使用quotes=NULL解决了这个问题(下面的答案quotes="\"也行)。我非常感谢实际的答案,而不是“阅读帮助手册,希望你能找到它”的回答,所以非常感谢。在我的情况下,我使用 > variable <- read.table("datafile.txt",quote=NULL),引号很好地传递了过来。 - jeramy townsley

1

在read.table中设置参数quote="\\"即可解决问题。


1
可能会,但你意识到你将要做什么了吗? - IRTFM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接