Вектор подмножества, не содержащий слова в операции с каналами в R (регулярное выражение)

David Rubinger спросил: 28 марта 2018 в 04:02 в: r

Как подмножить вектор для элементов, которые не содержат слова в операции с каналами? (Я действительно в трубе)

Я надеюсь, что есть способ инвертировать str_subset. В следующем примере я хотел бы просто вернуть второй элемент x вместо элементов с hi в них:

library(stringr)
x <- c("hi", "bye", "hip")
x %>% 
    str_dup(2) %>%  # just an example operation
    str_subset("hi")  # I want to return the inverse of this

1 ответ

Есть решение
Psidom ответил: 28 марта 2018 в 04:17

Вы можете использовать ^(?!.*hi), чтобы утверждать, что строка не содержит hi; Регулярное выражение использует отрицательный взгляд вперед ?! и утверждает, что строка не содержит шаблон .*hi:

x %>% 
    str_dup(2) %>%  # just an example operation
    str_subset("^(?!.*hi)")  
# [1] "byebye"

или отфильтровывает путем обращения :

x %>% 
    str_dup(2) %>%  # just an example operation
    {.[!str_detect(., "hi")]}  
# [1] "byebye"