基于正则表达式模式匹配将 PDF 索引为数据框列表

Indexing a PDF as list of data frames based on regex pattern match

在使用 tabulizer 和 pdftools 从 pdf 中提取信息时,有时我想根据正则表达式模式匹配为大量 df 列表编制索引。

a <- data.frame(yes=c("pension"))
b <- data.frame(no=c("other"))
my_list <- list(a,b)

我想使用 str_detect 到 return 匹配模式 "pension" 的基础 df 的索引。

所需的输出将是:

index <- 1 (based on which and str_detect)
new_list <- my_list[[index]]
new_list
     yes
1 pension

如何检测底层 df 中的模式,然后 return 使用的索引一直很困难。我看到以前的讨论使用循环和 if-then 语句,但似乎首选使用 purrr 的解决方案。

我们可以使用

getIdx <- function(pattern, l)
  l %>% map_lgl(~ any(unlist(map(.x, grepl, pattern = pattern))))

getIdx("pension", my_list)
# [1]  TRUE FALSE

my_list[getIdx("pension", my_list)]
# [[1]]
#       yes
# 1 pension

这允许多个匹配的数据帧。 (真的不需要 which。)

getIdx 中,我们遍历 l 的数据框,然后在给定的数据框中,我们遍历其列并使用 grepl。如果任何列中存在匹配项,则为相应的数据框返回 TRUE