2011-12-26 37 views
9

我正在嘗試使用the following link中所述的固定寬度結構來讀取this file(3.8mb)。read.fwf和數字符號

此命令:

a <- read.fwf('~/ccsl.txt',c(2,30,6,2,30,8,10,11,6,8)) 

產生一個錯誤:

line 37 did not have 10 elements

複製與跳過選項的不同值的問題之後,我想通了線導致所有含有「#問題「符號。

有沒有辦法解決它?

+1

+1謝謝你寫了一個很好的問題,包括我們需要回答問題的信息。 – 2011-12-26 10:28:42

回答

11

正如@jverzani已經評論過的,這個問題可能是#號經常用作一個字符來表示評論的事實。將comment.char輸入參數read.fwf設置爲#以外的值可以解決問題。我將在下面留下我的答案,作爲一個更一般的情況,您可以使用任何導致問題的角色(例如荷蘭城市名稱's Gravenhage中的's)。

我有其他符號發生此問題。我採取的方法是簡單地將#替換爲無,或者由不會產生錯誤的字符替換。在我的情況下,簡單地替換角色是沒有問題的,但在你的情況下這可能是不可能的。

所以我的方法是刪除生成錯誤的符號或用另一個字符替換。這可以使用文本編輯器(查找和替換),使用R腳本或使用一些名爲grepsed的Linux工具來完成。如果您想在R腳本中執行此操作,請使用scanreadLines來讀取這些行。一旦文本在內存中,您可以使用sub替換字符。

如果你不能替換字符,我會嘗試下面的方法:用一個不會產生錯誤的字符替換字符,用read.fwf將它讀入R,最後用#字符替換字符。

+5

我會認爲傳遞一個不同的註釋字符,說comment.char =「」,將工作。 (看read.table) – jverzani 2011-12-26 10:51:59

+0

如果你可以添加這個答案,那會很棒!我的答案更通用一些,因爲它也適用於任何字符串的問題(我在荷蘭城市名稱中遇到過這個問題)。 – 2011-12-26 11:05:02

+0

謝謝,@jverzani提示解決了這個問題。 – Alex 2011-12-26 19:39:31

4

上面的答案隨訪:去讀取所有字符爲文字,同時使用comment.char=""quote=""(後者負責@ PaulHiemstra的問題與荷蘭專有名詞的單引號)在調用read.fwf(這記錄在?read.table)。

+0

在read.fwf中使用quote =「」時,出現錯誤:Error in read.table(file = FILE,header = header,sep = sep,row.names = row.names,: 正式參數「quote」與多個實際參數相匹配 – panterasBox 2015-10-19 17:04:18

+0

you right - 'quote =「」'should not be necessary *,as'read.table' within internal called called'quote =「」'。如果您遇到問題但與此不同的是,繼續併發布另一個問題... – 2015-10-19 17:15:03