2013-07-08 2 views
0

Я пытаюсь извлечь таблицы из очень больших текстовых файлов (журналов компьютеров). Дикоа дал очень полезный совет по более раннему вопросу по этой теме: 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, что, вероятно, оставило бы меня с той же проблемой, что и выше.

EDIT:

Все пространства опоздавшим прямо перед и сразу после знака плюс. Возможно, эту информацию можно использовать здесь, чтобы заполнить пробелы или удалить их.

ответ

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 = ">") 
+0

Может быть хорошим, чтобы заменить ситуации с ' "+ "и'" +" ', отдельно, в случае несовпадения в интервале. – Thomas

+0

@Ricardo Saporta Спасибо. Это почти сработало. Мне пришлось изменить одну строку на: my.data <- gsub ("\\ +", "+", my.data) Затем мне пришлось установить row.names = NULL в read.table. –

+0

Марк, рад, что это помогло. Также см. Редактирование –

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