当header = TRUE时,read.fwf出错

时间:2014-02-06 02:03:55

标签: r import fixed-width

我已经模拟了这样的数据:

LastName   Date      email                                                    CreditCardNum   AgeZip  Amount
Paul       21/02/14  Aliquam.fringilla@dolordapibus.co.uk                     4241033422900360 6738851$14.39
Bullock      2/7/2014adipiscing.fringilla@lectusjusto.org                     5178789953524240 3336538$498.31
Mcmahon     11/5/2013lobortis.ultrices@lacus.org                              5389589582467450 7734302$92.44
Walters    25/09/13  consectetuer.cursus.et@sitamet.org                       5157094536097720 7794007$206.60
Franco     17/06/13  et@disparturientmontes.ca                                 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)是正确的。那么这个错误来自哪里?我的解决方案很好,我只想了解发生了什么。

1 个答案:

答案 0 :(得分:3)

如果您指定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  Aliquam.fringilla@dolordapibus.co.uk                     4241033422900360 6738851$14.39
Bullock      2/7/2014adipiscing.fringilla@lectusjusto.org                     5178789953524240 3336538$498.31
Mcmahon     11/5/2013lobortis.ultrices@lacus.org                              5389589582467450 7734302$92.44
Walters    25/09/13  consectetuer.cursus.et@sitamet.org                       5157094536097720 7794007$206.60
Franco     17/06/13  et@disparturientmontes.ca                                 345477952996264 2415873$89.12'))