【问题标题】:extract information from non tabular file and store as tibble从非表格文件中提取信息并存储为 tibble
【发布时间】:2021-03-05 16:22:50
【问题描述】:

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

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

如何提取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

【问题讨论】:

    标签: r tibble


    【解决方案1】:

    我们可以使用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.
    

    如果我们也想要标题

    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')
    

    【讨论】:

      【解决方案2】:

      类似以下的内容将满足问题的要求。括号必须转义,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)
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-17
        • 1970-01-01
        • 2021-06-27
        相关资源
        最近更新 更多