Как использовать функцию which для поиска в моем фрейме данных? - PullRequest
1 голос
/ 16 мая 2019

У меня есть несколько PDF-файлов, которые я хотел бы найти, чтобы быстро найти таблицы и графики, относящиеся к моим исследованиям.

#I load the following libraries
library(pdfsearch)
library(tm)
library(pdftools)

#I assign the directory of my PDF files to the path where they are located
directory <- '/References'

#and then I search the directory for the keywords "table", "graph", and "chart"
txt <- keyword_directory(directory,
 keyword = c('table', 'graph', 'chart'),
 split_pdf = TRUE,
 remove_hyphen = TRUE,
 full_names = TRUE)

#Up to this point everything works fine. I get a nice data.frame called "txt" 
#with 1356 objects in 7 columns. However, when I try to search the data.frame 
#I start running into trouble.

#I start with "hunter" a term that I know resides in the token_text column 
txt[which(txt$token_text == 'hunter'), ]

#executing this code produces the following message
[1] ID pdf_name keyword page_num line_num line_text token_text
<0 rows> (or 0-length row.names)

Использую ли я правильный инструмент для поиска по моим данным.Рамка?Есть ли более простой способ перекрестной ссылки на эти данные?Есть ли где-нибудь пакет, предназначенный для того, чтобы помочь ползти сквозь гору PDF?Спасибо за ваше время

1 Ответ

0 голосов
/ 17 мая 2019

Функция which возвращает TRUE или FALSE в зависимости от того, выполнено ли условие (для каждого значения, заданного в этом условии, например, всех значений в столбце кадра данных). Вы можете установить подкадр данных, введя значения TRUE/FALSE для строк, которые вы хотите сохранить / удалить.

Комбинируя это, вы получаете:
txt[which(txt$token_text == 'hunter'), ] что вы сделали и не получили никаких строк. Как было указано в комментариях, which для точного соответствия, и у вас может не быть точных совпадений.

Получение TRUE/FALSE на основе частичных совпадений или регулярных выражений вы можете использовать функцию grepl вместо: txt[grepl("hunter", txt$token_text, ignore.case=TRUE), ]

Для облегчения понимания я предпочитаю делать это с пакетом dplyr:
library(dplyr) txt %>% filter(grepl("hunter",token_text, ignore.case=TRUE))

...