如何在R中重复此搜索功能?

时间:2019-06-04 11:36:46

标签: r loops

我有几个rtf文件,想搜索文件中是否出现某些单词。如果出现,我想提取其中带有该单词的整个句子。

这是我想重复的代码部分。我已经在文档“ a1”上尝试过此操作,但是我要搜索的文件夹中有文档a1至a10。

library(striprtf)

files <- list.files(path="/Users/Jane/R/Test", pattern="*.rtf", full.names=TRUE, recursive=FALSE)

rtf <- read_rtf("a1.rtf", verbose = FALSE, row_start = "*| ", row_end = "",
         cell_end = " | ", ignore_tables = FALSE, check_file = TRUE)

text <- unlist(strsplit(rtf, "\\."))


toMatch <- c("passive","fund act")
matches <- unique(grep(paste(toMatch,collapse="|"), 
                        text, value=TRUE))
matches <- data.frame(matches)

最终输出应该是一个数据帧,其中一列是文件名(即a1),句子中包含“被动”和“基金行为”。

1 个答案:

答案 0 :(得分:1)

您可以使用lapply()并定义一个函数来执行所需的操作。 results将是包含所有匹配数据帧的列表

library(striprtf)

files <- list.files(path="/Users/Jane/R/Test", pattern="*.rtf", full.names=TRUE, recursive=FALSE)
# files <-paste0(paste0("a",1:10),".rtf")

results = lapply(files, function(x) {
  rtf <- read_rtf(x, verbose = FALSE, row_start = "*| ", row_end = "",
                  cell_end = " | ", ignore_tables = FALSE, check_file = TRUE)

  text <- unlist(strsplit(rtf, "\\."))


  toMatch <- c("passive","fund act")
  matches <- unique(grep(paste(toMatch,collapse="|"), 
                         text, value=TRUE))
  matches <- data.frame(matches)
})