grepl через несколько столбцов - подстановочный знак не работает - PullRequest
0 голосов
/ 17 сентября 2018

В настоящее время я работаю с набором данных, который имеет несколько похожих столбцов: от item1, item2 и т. Д. До item8.Внутри функции, которую я пишу, я создал специальный поиск для использования в качестве первого аргумента в функции ifelse, которая ищет фразу в любом из следующих столбцов:

grepl(exact_name, item1) | grepl(exact_name, item2) | grepl(exact_name, item3) | grepl(exact_name, item4) | grepl(exact_name, item5) | grepl(exact_name, item6) | grepl(exact_name, item7) | grepl(exact_name, item8)

Это работает нормально, ноЯ хотел бы иметь возможность применить эту функцию к фреймам данных с некоторым неизвестным числом столбцов элементов (все используемые фреймы данных будут иметь хотя бы один столбец элементов, и если он имеет только один, он все равно будет в формате item1 вместопросто пункт).Я попытался использовать подстановочный знак * следующим образом:

grepl(exact_name, item*)

, но я получаю ошибку с круглыми скобками после элемента * и даже не могу запустить раздел.Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 17 сентября 2018

Если item\\d+ являются объектами в глобальной среде, мы можем использовать mget, чтобы получить объекты в list, затем выполнить цикл по list, применить grepl и Reduce к один логический vector

Reduce(`|`,lapply(mget(ls(pattern = "^item\\d+$")), grepl, pattern = exact_name))

Если item\\d+ являются столбцами в наборе данных, используйте filter_at

library(dplyr)
df1 %>%
   filter_at(vars(matches("^item\\d+$")), any_vars(str_detect(., exact_name)))

Кроме того, если мы не проводим частичное совпадение, то == также должно работать

df1 %>%
   filter_at(vars(matches("^item\\d+$")), any_vars(.== exact_name))
...