【发布时间】:2014-02-14 18:26:40
【问题描述】:
我试图读取包含隐藏或不可见字符的 *.csv 文件,但未成功。文件内容如下所示:
my.data2 <- read.table(text = '
Common.name, Scientific.name, Stuff1, Stuff2
Greylag.Goose, Anser.anser, AAC, rr
Snow.Goose, Anser.caerulescens, AAC, rr
Greater.Canada.Goose, Branta.canadensis, AAC, rr
Barnacle.Goose, Branta.leucopsis, AAC, rr
Brent.Goose, Branta.bernicla, AAC, rr
', header = TRUE, sep=',', stringsAsFactors = FALSE)
请注意,上面的read.table 命令可以正确读取数据。但是,read.csv 无法正确读取文件,因为在许多行中,第二个空格后面有一个隐藏字符。在某些行中,在第一个空格之后还有一个隐藏字符。在某些行中没有隐藏字符。例如:
setwd('c:/users/mmiller21/simple R programs')
my.data <- read.csv('invisible.delimiter2.csv', header = TRUE)
my.data
返回:
Common.name Scientific.name Stuff1 Stuff2
1 Greylag.Goose Anser.anser
2 AAC rr
3 Snow.Goose
4 Anser.caerulescens
5 AAC rr
6 Greater.Canada.Goose Branta.canadensis AAC rr
7 Barnacle.Goose Branta.leucopsis
8 AAC rr
9 Brent.Goose Branta.bernicla
10 AAC rr
更具体地说,如果我在记事本中打开 *.csv 文件并使用右箭头键将光标沿第一行数据移动,我必须按两次右箭头键才能移过第一个 @987654328 @在AAC.
以下行不能解决问题:
my.data <- read.csv('invisible.delimiter2.csv', sep=',', header = TRUE)
根据我的经验,制表符是一种相当常见的隐藏字符或分隔符。但是,我尝试搜索和替换选项卡,但没有帮助。
我也尝试将 *.csv 文件转换为 *.txt 文件,但返回以下内容:
> my.data3 <- read.table('invisible.delimiter2.txt', sep=',', header = TRUE)
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
line 1 did not have 4 elements
> my.data3
Error: object 'my.data3' not found
我不熟悉其他可能的解决方案。该文件太大,无法手动在每个空格中搜索隐藏字符并将其删除。
感谢您就如何读取此类文件或如何在将文件读入 R 之前查找和删除隐藏字符提供任何建议。
如果有帮助,我最初是通过从 Wikipedia 复制表格来获取数据的。也许这可能有助于识别隐藏的角色。
编辑
感谢下面的 cmets,我使用 gVim 7.3 打开了示例数据文件。该软件显示隐藏字符并将其显示为^M。不幸的是,我无法在 gVim 7.3 中通过简单的查找和替换从数据文件中删除该字符。如果以及当我弄清楚如何删除^M 时,我将在此处发布该方法。
这是一篇关于如何使用 Perl 删除 ^M 的帖子。
In Perl, how to remove ^M from a file?
希望我能弄清楚如何使用 R 或文本编辑器将其删除
这是存储示例 *.csv 文件的链接。
以及指向同一站点上同一文件的替代链接:
【问题讨论】:
-
你能上传一个文本文件的前 10-20 行吗?
-
我不知道如何上传文件。如果我发现我会上传一些数据。
-
您必须使用第三方网站。像 pastebin 或类似的东西。
-
等一下 - 你说
read.table可以读取数据,但read.csv没有?所以嗯,我认为这里有一个解决方案......不确定它可能是什么......嗯,哦,是的,“只需使用read.table”? -
@Spacedman 也许我表达得不好。当我写
the above read.table command reads the data correctly时,我的意思是如果将引用的代码复制并粘贴到 R 中,R 将正确读取数据,但如果尝试读取外部文件,则会导致错误。也许您的建议是将大数据文件的全部内容直接复制并粘贴到 R 中,然后尝试以这种方式读取数据。这可能行得通,但它似乎充其量只是一个权宜之计。希望有人能够提供一种方法来有效地从文件中删除隐藏字符,而不管文件大小。