2015-10-13 193 views
2

我有以下的TXT文件模型摘要(T1.txt):從TXT文件中提取矩陣

=== Summary === 

Correctly Classified Instances   423    88.6792 % 
Incorrectly Classified Instances  54    11.3208 % 
Kappa statistic       0.6766 
Mean absolute error      0.0854 
Root mean squared error     0.2656 
Relative absolute error     38.4098 % 
Root relative squared error    79.9279 % 
Coverage of cases (0.95 level)   91.6143 % 
Mean rel. region size (0.95 level)  36.1985 % 
Total Number of Instances    477  

=== Confusion Matrix === 

    a b c <-- classified as 
357 20 7 | a = 1 
    12 37 11 | b = 2 
    3 1 29 | c = 3 

我想最後一個矩陣提取到數據幀(DF1):

> df1 
     a b c 
    357 20 7 
     12 37 11 
     3 1 29 

我們必須考慮到txt文件背後的模型不再存在(我只有txt文件)。另外,矩陣大小可以從一個文件到另一個文件變化,其行數不一定等於列數。

+0

閱讀,我想你解決了它..你有文本文件中的內容完全和你展示的一樣嗎? – akrun

+0

我可能寧願使用Perl來解決這個問題。 – RHertel

+0

@akrun,兩個問題之間沒有區別,在前一個我有模型,並可以解析提取它,在這裏我只有txt沒有模型(正如在問題主體中提到) – Avi

回答

3

我們可以讀取使用readLinesgrep發現有「混淆矩陣」的行的文件,子集的線,使用gsub去除串,並基於前面的問題與read.table

lines <- readLines('Avi.txt', warn=FALSE) 
i1 <- grep('Confusion Matrix', lines) 
read.table(text=gsub('(<-|\\|).*', '', 
     lines[(i1+2):length(lines)]), header=TRUE) 
# a b c 
#1 357 20 7 
#2 12 37 11 
#3 3 1 29 
+1

我正在建議類似的東西,懶得寫出來:) –

+1

@SerbanTanasa感謝您的評論。如果存在多個實例(OP沒有),則這將不起作用 – akrun

+1

@Avi如果您有多個實例'i1 < - grep('Confusion Matrix',行) i2 <-c(grep('Summary' (map)(seq,i1,i2),function(x){x1 < - lines [x [-1]]; read.table(text = gsub('(< - | \\ |)。*','',x1 [nzchar(x1)]),header = TRUE)'應該可以工作 – akrun