#r #for-loop #grepl
#r #for-цикл #grepl
Вопрос:
У меня возникли проблемы с получением точного соответствия grepl при фильтрации фрейма данных с использованием вектора. Я использую воспроизводимый пример ниже:
my_vector<-c("Mazda", "Datsun")
my_df<-data.frame(My_vehicles=c("Mazda", "Mazda2", "Mazda3", "Datsun", "Datsun2", "Datsun3"))
Если я выполню приведенный ниже код
grepl("\bMazda\b",my_df$My_vehicles)
Я получаю это как результат, который является правильным TRUE FALSE FALSE FALSE FALSE FALSE FALSE
Однако, похоже, я не могу заставить это работать в цикле. Пример ниже
list_df<-list()
for (i in 1:length(my_vector))
{ df<-my_df%>%
filter(grepl(my_vector[i],My_vehicles))
list_df[[i]]=df
}
Если я изменю
filter(grepl(my_vector[i],My_vehicles))
Для
filter(grepl("\bmy_vector[i]\b",My_vehicles))
Я не получаю правильного результата. Мне нужен список из двух новых фреймов данных, созданных из цикла, каждый из которых должен иметь 1 переменную, для которой он был правильно отфильтрован.
Комментарии:
1.
filter(grepl(paste0("\b",my_vector[i],"\b"),My_vehicles))
2. Вы также могли бы сделать
filter(grepl(glue::glue("\b{my_vector[i]}\b"),My_vehicles))
3. Спасибо, оба хороших ответа, и они работают
Ответ №1:
Попробуйте это:
list_df<-list()
for (i in 1:length(my_vector))
{
df<-my_df%>%
filter(grepl(paste0("\b",my_vector[i],"\b"),My_vehicles))
list_df[[i]]=df
}