我試圖從非常大的文本文件(計算機日誌)中提取表。 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
直接輸出,這可能仍然會帶來與上述相同的問題。
編輯:
所有的空格似乎是在加號前和加號後出現的。也許這些信息可以用來填充空間或刪除它們。
之前插入
my.data$model <- gsub(" *\\+ *", "+", my.data$model)
可能是很好用'更換的情況下 「+ 」'和'「 +」',另外,萬一有在間距不一致。 – Thomas@Ricardo薩波塔謝謝。這幾乎奏效。我不得不將一行改爲:my.data < - gsub(「\\ +」,「+」,my.data)然後我必須在read.table中設置row.names = NULL。 –
馬克,很高興它幫助。另請參閱編輯 –