R: Фильтрация фрейма данных путем сопоставления частичного из списка, используя "grepl" - PullRequest
1 голос
/ 26 июня 2019

У меня большой фрейм данных (df), который я хочу отфильтровать путем поиска частичных совпадений между столбцом (df$column) и списком (aList).

aList <- c("ID1", "ID2", "ID3")

Переменная в моем фрейме данных, который я использую для фильтрации, содержит значения, которые могут начинаться только со значений в списке. Пример: ID1_23 или ID2AV.

Затем я хотел бы использовать grepl или аналогичный для поиска любого значения в моем столбце фрейма данных, которое начинается со значения aList. Мой подход к обработке этого способа при поиске только отдельных значений будет следующим:

library(dplyr)
newDf <- df %>% filter(grepl("^ID1", column))

Тогда возникает моя проблема в том, как сделать similair со всеми значениями в моем списке. Я попробовал следующий подход:

dummyList <- c()
for (i in 1:length(aList)){
    list1 <- dplyr::filter(grepl(paste("\"^", aList[i], "\""), df$column))
    rbind(list1, dummyList)
}

, которые предоставляют мне следующий код ошибки:

Error in UseMthod("filter_") : 
  no applicable method for ´filter_´ applied to an obecjt of class "logical"

Кто-нибудь может мне помочь?

Спасибо!

1 Ответ

1 голос
/ 26 июня 2019

Мы можем paste значения вместе

library(tidyerse)
df %>% 
      filter(grepl(str_c("^(", str_c(aList,  collapse="|"), ")"), column))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...