读取某些数据丢失的txt文件

时间:2014-05-17 12:54:18

标签: r rdata

我确实已经意识到已经提出了类似的问题,但鉴于所提供的答案都没有解决我的问题,沮丧情绪开始出现。问题如下:我有27个相同形状的时间序列数据(日期,开放,高,低,最后)以txt格式,我想在R中将它们作为.txt文件导入,使得第一行读取的是具有全部5个数据的行。下面给出的示例显示,虽然文本文件中的数据是在1984-01-03开始的,但我希望从1990-11-05读取该文件(因为早期日期缺少Open),将第一列日期保存为rownames并将其他4列保存为数字,每列都有明显的名称。

            Open    High    Low     Last
1984-01-03         1001.40  997.50  997.50
1984-01-04         999.50   993.30  998.60

1990-11-05  2038.00 2050.20 2038.00 2050.10
1990-11-06  2055.00 2071.00 2052.20 2069.80

鉴于这是一个常见问题,我尝试了以下代码:

    ftse <- read.table("FTSE.txt", sep="", quote="", dec=".", as.is=TRUE,   
               blank.lines.skip=TRUE, strip.white=TRUE,na.strings=c("","NA"),
               row.names=1, col.names=c("Open","High","Low","Last"))

我已经尝试了各种组合,同时指定colClasses,header = TRUE和其他命令(对于fill = TRUE,数据实际上是读取的,但这正是我不想要的)但是我总是得到以下错误(或错误消息中的行号不同)

    Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
    line 1731 did not have 4 elements

第1731行是对应于1984-01-03日期的行。我很乐意寻求帮助,因为我不能再在这些问题上浪费时间,所以请提供建议我如何解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我不知道一般解决方案可能是什么,但readLines和read.fwf的组合可能适用于您的情况:

ftse.lines <- readLines("FTSE.txt")
ftse.lines <- ftse.lines[ftse.lines != ""] # skip empty lines
ftse <- read.fwf(textConnection(ftse.lines), widths=c(11,8,8,8,8), skip=1, row.names=1)
names(ftse) <- c("Open", "Hi", "Lo", "Last")

您可能需要修改某些部分,但它适用于您的示例。

以下(仅使用read.fwf)也有效:

 ftse <- read.fwf("FTSE.txt", widths=c(11,8,8,8,8), col.names=c("blah", "Open", "Hi", "Lo", "Last"), skip=1)

然后尝试将第一个col转换为rownames,如果确实需要的话。