从非表格文件中提取信息并存储为 tibble

extract information from non tabular file and store as tibble

我使用了一个静态库,该库将其输出导出到文本文件中。我想从文本文件中提取一些信息。我可以复制粘贴,但我想自动执行从输出文本文件中提取信息的过程。

下面是文本文件中的示例输出。

如何提取LL(0)和LL(final)以及对应的值存储在tibble中?

谢谢

Date: XX-XX-XXXX
Time: XX:XX PM

Model: Binary Logit Model

LL(0)                            : -376.3789
Number of Inputs                 :  500
LL(final)                        : -114.1382
Rho-sq                           :  0.512

我们可以用 readLines 读取 .txt,使用 grep 对具有“LL”的行进行子集化,通过删除字符直到 : 后跟零个或多个空格

v1 <- sub(".*:\s*", "", grep("^LL\(", txt, value = TRUE))
tibble(v1 = as.numeric(v1))
# A tibble: 2 x 1
#    v1
#  <dbl>
#1 -376.
#2 -114.

如果我们也想要 header

library(data.table)
library(magrittr)
read.table(text = grep("^LL\(", txt, value = TRUE), 
        sep = ":", strip.white = TRUE) %>% 
     data.table::transpose(., make.names = "V1")
#     LL(0) LL(final)
#1 -376.3789 -114.1382

数据

txt <- readLines('file.txt')

类似下面的内容将完成问题的要求。必须转义括号才能让 grep 获取它们。

library(tibble)

fun_extract <- function(text, pattern){
  i <- grep(pattern, text)
  x <- sub("^.*:(.*$)", "\1", text[i])
  as.numeric(x)
}

lines <- readLines("data.txt")

ll0 <- "LL\(0\)"
llfinal <- "LL\(final\)"

tbl <- tibble(
  `LL(0)` = fun_extract(lines, ll0), 
  `LL(final)` = fun_extract(lines, llfinal)
)