首页 > 解决方案 > 基于正则表达式模式匹配将 PDF 索引为数据帧列表

问题描述

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

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

我想使用 str_detect 返回与模式“养老金”匹配的基础 df 索引。

所需的输出将是:

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

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

标签: rregexpdfpurrrtabulizer

解决方案


我们可能会使用

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则为相应的数据框返回。


推荐阅读