【问题标题】:locating specific columns in a pdf table from R从 R 中定位 pdf 表中的特定列
【发布时间】:2021-04-07 13:51:19
【问题描述】:

我想知道如何在this pdf document 的最后一页(第 18 页)的表格中找到左起第 2 列和第 3 列

我正在使用pdftools 包,我想知道是否有办法从左侧提取第二和第三列,它们只是数字数据?

library(pdftools)
df <- pdf_data("https://github.com/rnorouzian/m/raw/master/Kang_et_al%20(2015).pdf")[[18]]

【问题讨论】:

    标签: r regex dataframe pdf web-scraping


    【解决方案1】:

    接受的答案很复杂,在浪费了相当多的时间摆弄 pdf_data() 输出之后,认为这可能有助于展示如何提取和操作向量。

    library(pdftools)
    library(stringr)
    df <- pdf_data("https://github.com/rnorouzian/m/raw/master/Kang_et_al%20(2015).pdf")[[18]]
    df <- df[stringr::str_detect(df$text, "\\d"),]
    data.frame(se = df$text[df$x == 189], g = df$text[df$x == 252])
    

    【讨论】:

    • 编辑您的答案以包含其他说明会很有用。这种方法与公认的答案有何不同?
    【解决方案2】:

    使用一些 tidy verse 包可以这样实现:

    1. 过滤第二和第三列中的值。第 2 列值从位置 x=189 开始,第 3 列从 x=252 开始。
    2. 另外,为了确保我们只获得我首先转换为数字的值,从而所有文本都转换为 NA。注意:其中一个值有一个逗号作为小数点,我首先必须删除它。
    3. 获取值后,我使用pivot_wider 重新调整数据集,并为其添加一行id
    4. 最后我重命名了列。
    library(pdftools)
    #> Using poppler version 0.73.0
    df <- pdf_data("https://github.com/rnorouzian/m/raw/master/Kang_et_al%20(2015).pdf")[[18]]
    
    library(dplyr)
    library(tidyr)
    library(stringr)
    
    col_x <- c(189, 252)
    
    df %>% 
      mutate(value = str_replace(text, "(\\d+),(\\d+)", "\\1.\\2"),
             value = as.numeric(value)) %>% 
      filter(x %in% col_x, !is.na(value)) %>% 
      select(x, value) %>% 
      group_by(x) %>% 
      mutate(id = row_number()) %>% 
      pivot_wider(names_from = x, values_from = value) %>% 
      rename(row = 1, g = 2, se = 3)
    #> Warning: Problem with `mutate()` input `value`.
    #> ℹ NAs introduced by coercion
    #> ℹ Input `value` is `as.numeric(value)`.
    #> Warning in mask$eval_all_mutate(dots[[i]]): NAs introduced by coercion
    #> # A tibble: 20 x 3
    #>      row     g    se
    #>    <int> <dbl> <dbl>
    #>  1     1 0.089 0.179
    #>  2     2 0.383 0.257
    #>  3     3 0.481 0.355
    #>  4     4 0.496 0.356
    #>  5     5 0.103 0.335
    #>  6     6 0.104 0.257
    #>  7     7 0.068 0.289
    #>  8     8 0.43  0.359
    #>  9     9 1.48  0.351
    #> 10    10 1.38  0.257
    #> 11    11 0.888 0.388
    #> 12    12 0.570 0.314
    #> 13    13 0.642 0.39 
    #> 14    14 1.16  0.364
    #> 15    15 0.341 0.432
    #> 16    16 0.607 0.299
    #> 17    17 0.473 0.361
    #> 18    18 0.472 0.423
    #> 19    19 0.902 0.368
    #> 20    20 0.245 0.363
    

    reprex package (v0.3.0) 于 2020 年 12 月 31 日创建

    【讨论】:

      猜你喜欢
      • 2014-06-25
      • 1970-01-01
      • 2019-05-16
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      相关资源
      最近更新 更多