2015-10-13 3 views
2

У меня есть следующее резюме модели в текстовом файле (T1.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 

Я хотел бы извлечь последнюю матрицу в dataframe (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

Мы можем прочитать файл с помощью readLines, grep найти строку, которая имеет «Путаница Matrix», подмножество строк, используйте 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 ('Матрица замешательства', строки) i2 <- c (grep ('Summary' , строки) [- 1] -1, length (lines)) lapply (Map (seq, i1, i2), function (x) {x1 <- lines [x [-1]]; read.table (текст = gsub ('(<- | \\ |). *', '', x1 [nzchar (x1)]), header = TRUE) 'должен работать – akrun

Смежные вопросы