我正在尝试从非常大的文本文件(计算机日志)中提取表。 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 = ">")
我相信我必须使用变量top
和bottom
来定位日志中的表,因为日志是巨大的,可变的和复杂的。此外,并非每个表都包含相同数量的模型。
也许可以使用正则表达式以某种方式利用每个模型名称中存在的AA
和CC(~1)
,但我不知道如何开始。感谢您提供任何帮助,并对后续问题感到抱歉。我应该在我的初始问题中使用更实际的示例表。我有大量的日志。否则我可以手动提取和编辑表格。表本身是一个奇怪的对象,我只能用capture.output
直接导出,这可能仍然会给我带来与上面相同的问题。
编辑:
所有空格似乎都出现在加号之前和之后。也许这些信息可以用来填充空格或删除它们。
答案 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 = ">")