读取一列中包含空格的表

时间:2013-07-08 05:42:35

标签: regex r import

我正在尝试从非常大的文本文件(计算机日志)中提取表。 Dickoa在此处就此主题提出了非常有用的建议:extracting table from text file

我修改了他的建议以适应我的具体问题,并在上​​面的链接上发布了我的代码。

不幸的是我遇到了并发症。表中的一列包含空格。当我尝试在上面的链接上运行代码时,这些空格产生错误。有没有办法修改该代码,或者特别是read.table函数将下面的第二列识别为列?

这是虚拟日志中的虚拟表:

> collect.models(, adjust = FALSE)
                                                                           model npar      AICc    DeltaAICc       weight  Deviance
5   AA(~region + state + county + city)BB(~region + state + county + city)CC(~1)   17  11111.11    0.0000000 5.621299e-01  22222.22
4                 AA(~region + state + county)BB(~region + state + county)CC(~1)   14  22222.22    0.0000000 5.621299e-01  77777.77
12                                  AA(~region + state)BB(~region + state)CC(~1)   13  33333.33    0.0000000 5.621299e-01  44444.44
12                                                  AA(~region)BB(~region)CC(~1)    6  44444.44    0.0000000 5.621299e-01  55555.55
> 
> # the three lines below count the number of errors in the code above

以下是我尝试使用的R代码。如果第二列(模型列)中没有空格,则此代码有效:

my.data <- readLines('c:/users/mmiller21/simple R programs/dummy.log')

top    <- '> collect.models\\(, adjust = FALSE)'
bottom <- '> # the three lines below count the number of errors in the code above'

my.data  <- my.data[grep(top, my.data):grep(bottom, my.data)]

x <- read.table(text=my.data, comment.char = ">")

我相信我必须使用变量topbottom来定位日志中的表,因为日志是巨大的,可变的和复杂的。此外,并非每个表都包含相同数量的模型。

也许可以使用正则表达式以某种方式利用每个模型名称中存在的AACC(~1),但我不知道如何开始。感谢您提供任何帮助,并对后续问题感到抱歉。我应该在我的初始问题中使用更实际的示例表。我有大量的日志。否则我可以手动提取和编辑表格。表本身是一个奇怪的对象,我只能用capture.output直接导出,这可能仍然会给我带来与上面相同的问题。

编辑:

所有空格似乎都出现在加号之前和之后。也许这些信息可以用来填充空格或删除它们。

1 个答案:

答案 0 :(得分:1)

尝试在my.data$model <- gsub(" *\\+ *", "+", my.data$model)

之前插入read.table
my.data  <- my.data[grep(top, my.data):grep(bottom, my.data)]

my.data$model <- gsub(" *\\+ *", "+", my.data$model)

x <- read.table(text=my.data, comment.char = ">")