我无法读取数据到R

时间:2010-08-13 11:35:23

标签: r

我正在尝试读取一些数据,这是一个看起来像这样的文本文件:

2009-08-09 - 2009-08-15 0   2   0
2009-08-16 - 2009-08-22 0   1   0
2009-08-23 - 2009-08-29 0   1   0
2009-08-30 - 2009-09-05 0   1   0
2009-09-06 - 2009-09-12 0   1   0
2009-09-13 - 2009-09-19 0   1   0
2009-09-20 - 2009-09-26 0   1   0
2009-09-27 - 2009-10-03 0   1   0 

我尝试过使用此命令

test <- read.table('test', sep ="\t")

以及该主题的许多不同变体。但我所有回来的都是:

   V1
1  ÿþ2
2     
3     
4     
5     
6     
7     
8     
9     
10    
11    
12    
13    
14    
15    
16  

而我想要一个四列圆柱数据。

我出错的任何想法?

3 个答案:

答案 0 :(得分:4)

您正在阅读的文件可能正在使用除ASCII之外的某些编码。 ?read.table显示

 read.table(file, header = FALSE, sep = "", quote = "\"'",
            ... 
            fileEncoding = "", encoding = "unknown")

fileEncoding: character string: if non-empty declares the encoding used
          on a file (not a connection) so the character data can be
          re-encoded.  See 'file'. 

所以也许尝试设置fileEncoding参数。如果您不知道编码,可以尝试“utf-8”或“cp-1252”。如果这不起作用,那么如果您粘贴实际文件的片段,我们就可以识别编码。

答案 1 :(得分:3)

你在这里看到的是什么:

ÿþ

是UTF-16-LE或UCS-2LE的字节顺序标记(BOM)。请参阅维基百科(Byte Order Mark)以获得解释。您的文件中可能包含需要此编码的奇怪语言的字符,或者您的文件可能是由某些Windows软件创建的,该软件使用BOM保存文件。 BOM放在文件开头的所有其他数据之前。

R看到这些字符,并认为数据从这里开始。尝试:

(1)如果您不需要这种编码,只需在文本编辑器(如Vim)中打开数据,更改编码,保存并读入R.(在Vim中:write ++enc=utf-8 new_file_name.txt,然后关闭文件并打开新保存的版本,然后执行:set nobomb,以确保,然后:wq。)

(2)如果您需要编码或不想通过文本编辑器,请告诉R文件所在的编码。您可以尝试:

read.table("file.dat", fileEncoding = "UTF-16")
read.table("file.dat", fileEncoding = "UTF-16LE")
read.table("file.dat", fileEncoding = "UTF-16-LE")
read.table("file.dat", fileEncoding = "UCS-2LE")

如果这些都不起作用,请尝试相关问题中给出的解决方案:How to detect the right encoding for read.csv?,并查看R Data Import/Export上的R手册,它有一节介绍带有BOM的文件。

答案 2 :(得分:1)

您的分隔符可以是空格而不是制表符。如果您将sep参数保留为"",它将使用任何类型的空格。

编辑:实际上,编码确实更有可能成为问题的根源。

使用readLines读取文件,然后使用Encoding检查编码。