2010-08-13 71 views
1

我想在一些数据是读的是一个文本文件,它看起来像这样:我不能在数据读取至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 

而我想要一个四柱状数据框。

任何想法我错了吗?

+0

你确定该文件是制表符分隔的,并且变量之间没有空格吗? – 2010-08-13 11:49:51

回答

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”。如果这不起作用,那么如果您将实际文件的片段粘贴到一个片段中,我们可能能够识别编码。

+0

是的 - 我以为这可能是问题,并尝试过utf-8和cp-1252,但这些都没有奏效。但调查更多,它是“utf-16”。现在它工作。 谢谢! – 2010-08-13 12:07:40

1

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

编辑:实际上,编码确实听起来更可能作为问题的根源。

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

3

你所看到的在这里:

ÿþ 

是UTF-16-LE或UCS-2LE字节顺序标记(BOM)。请参阅Wikipedia(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的文件。