2014-02-06 67 views
2

我有模擬看起來像這樣的數據:錯誤read.fwf當標題= TRUE

LastName Date  email             CreditCardNum AgeZip Amount 
Paul  21/02/14 [email protected]      4241033422900360 6738851$14.39 
Bullock  2/7/[email protected]      5178789953524240 3336538$498.31 
Mcmahon  11/5/[email protected]        5389589582467450 7734302$92.44 
Walters 25/09/13 [email protected]      5157094536097720 7794007$206.60 
Franco  17/06/13 [email protected]         345477952996264 2415873$89.12 

,這是我正在試圖將其導入到R,與頭:

w <- c(11,10,57,16,3,5,8) 
df <- read.fwf("data.txt",widths=w,stringsAsFactors=F) 
names(df) <- df[1,]; df <- df[-1,] 

我沒有使用header=T的原因是,它給我的錯誤:

Error in read.table(file = FILE, header = header, sep = sep, row.names = row.names, : more columns than column names 

剛剛是不正確的。我知道寬度(w)是正確的。那麼這個錯誤來自哪裏?我的解決方案工作正常,我只想了解發生了什麼。

+0

能否請您提供您的'w'載體,使這是(更多)重現? – jbaums

+1

是的,對不起:'w < - c(11,10,57,16,3,5,8)'。編輯。 – shadowtalker

+0

現在我有點不清楚你的問題是什麼。你想知道爲什麼錯誤被拋出?或者你是在優雅的解決方案之後?你提出的指定'header = F'的方法似乎很好。 – jbaums

回答

2

如果指定header=TRUE,則根據?read.fwf,必須確保列名之間用sep分開。默認值是名稱被\t(製表符)分開,並且這對於您的數據不能爲真。

下面的作品就好了:

w <- c(11, 10, 57, 16, 3, 5, 8) 

read.fwf(widths=w, header=TRUE, sep='|', 
file=textConnection('LastName |Date  |email             |CreditCardNum |Age|Zip |Amount 
Paul  21/02/14 [email protected]      4241033422900360 6738851$14.39 
Bullock  2/7/[email protected]      5178789953524240 3336538$498.31 
Mcmahon  11/5/[email protected]        5389589582467450 7734302$92.44 
Walters 25/09/13 [email protected]      5157094536097720 7794007$206.60 
Franco  17/06/13 [email protected]         345477952996264 2415873$89.12')) 
+0

我想知道在'read.fwf()'中應該使用「sep」參數。有點擊敗目的伊莫。無論哪種方式,我都希望有一種解決方案不需要我修改實際數據,即使修改量很小並且可以輕鬆實現自動化。另外請注意,'w'與你(理所當然)認爲的不同;看到我上面的評論。 – shadowtalker

+0

只是注意到我合併了年齡和郵編。我將編輯我的帖子。我還有一個印象:'fwf'數據的標題通常與後續行的寬度相同,所以我同意你的冗餘。 – jbaums

+0

它們寬度相同,只是間距已關閉。在這一步之後,我會削減前後的空白。 – shadowtalker