Я пытаюсь извлечь таблицы из текстовых файлов и нашел несколько более ранних сообщений здесь, которые адресуют похожие вопросы. Однако ни одна из них не работает эффективно с моей проблемой. Самый полезный ответ, который я нашел это один из моих предыдущих вопросов здесь: R: removing header, footer and sporadic column headings when reading csv fileизвлечение таблицы из текстового файла
Пример фиктивных текстовый файл содержит:
>
>
> ###############################################################################
>
> # Display AICc Table for the models above
>
>
> collect.models(, adjust = FALSE)
model npar AICc DeltaAICc weight Deviance
13 P1 19 94 0.00 0.78 9
12 P2 21 94 2.64 0.20 9
10 P3 15 94 9.44 0.02 9
2 P4 11 94 619.26 0.00 9
>
>
> ###############################################################################
>
> # the three lines below count the number of errors in the code above
>
> cat("ERROR COUNT:", .error.count, "\n")
ERROR COUNT: 0
> options(error = old.error.fun)
> rm(.error.count, old.error.fun, new.error.fun)
>
> ##########
>
>
Я написал следующий код, чтобы извлечь нужную таблицу:
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[-c(grep(bottom, my.data):length(my.data))]
my.data <- my.data[-c(1:grep(top, my.data))]
my.data <- my.data[c(1:(length(my.data)-4))]
aa <- as.data.frame(my.data)
aa
write.table(my.data, 'c:/users/mmiller21/simple R programs/dummy.log.extraction.txt', quote=F, col.names=F, row.name=F)
my.data2 <- read.table('c:/users/mmiller21/simple R programs/dummy.log.extraction.txt', header = TRUE, row.names = c(1))
my.data2
model npar AICc DeltaAICc weight Deviance
13 P1 19 94 0.00 0.78 9
12 P2 21 94 2.64 0.20 9
10 P3 15 94 9.44 0.02 9
2 P4 11 94 619.26 0.00 9
Я бы предпочел не писать и затем читать my.data
для получения нужного кадра данных. До этого шага текущий код возвращает вектор строк для my.data
:
[1] " model npar AICc DeltaAICc weight Deviance" "13 P1 19 94 0.00 0.78 9"
[3] "12 P2 21 94 2.64 0.20 9" "10 P3 15 94 9.44 0.02 9"
[5] "2 P4 11 94 619.26 0.00 9"
Есть ли какой-нибудь способ, которым я могу преобразовать выше вектор строк в кадре данных, как, что в dummy.log.extraction.txt
без записи, а затем чтение my.data
?
Линия:
aa <- as.data.frame(my.data)
возвращает следующее, который выглядит как то, что я хочу:
# my.data
# 1 model npar AICc DeltaAICc weight Deviance
# 2 13 P1 19 94 0.00 0.78 9
# 3 12 P2 21 94 2.64 0.20 9
# 4 10 P3 15 94 9.44 0.02 9
# 5 2 P4 11 94 619.26 0.00 9
Однако:
dim(aa)
# [1] 5 1
Если я могу разделить aa
на столбцы, то я думаю, что у меня будет то, что я хочу, без необходимости писать, а затем читать my.data
.
Я нашел сообщение: Extracting Data from Text Files Однако в опубликованном ответе в таблице, как представляется, имеется фиксированное количество строк. В моем случае количество строк может варьироваться от 1 до 20. Кроме того, я бы предпочел использовать base R
. В моем случае я думаю, что количество строк между bottom
и последней строкой таблицы является константой (здесь 4).
Я также нашел сообщение: How to extract data from a text file using R or PowerShell? Однако в моем случае ширина столбцов не фиксирована, и я не знаю, как разделить строки (или строки), так что всего семь столбцов.
Учитывая все вышеизложенное, возможно, мой вопрос заключается в том, как разделить объект aa
на столбцы. Благодарим вас за любые советы или помощь.
EDIT:
Фактические журналы производятся суперкомпьютер и содержать до 90000 строк. Тем не менее, количество строк значительно варьируется среди журналов. Вот почему я использовал top
и bottom
.
Ваших данные выглядят консольный вывод из R сессии. Интересно, почему таблица не была экспортирована или почему вы не можете запустить код R, чтобы ее получить. – Roland
Файл R запускается на суперкомпьютере, и таблица берется из журнала, возвращаемого этим аппаратом. Я не знаю, как попросить суперкомпьютер экспортировать таблицу для меня. –