2010-08-13 121 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的文件。