Я хочу удалить все символы, которые не соответствуют строковому шаблону, используя пакет stringr
. До сих пор я был в состоянии удалить их до шаблона, используя "\\w+(?= (grape|satsuma))"
в качестве шаблона, но удалить их после того, как шаблон все еще невозможен.
> str_remove_all("apples grape banana melon olive persimon grape apples satsuma papaya",
+ "\\w+(?= (grape|satsuma))")
[1] " grape banana melon olive grape satsuma papaya"
Желаемый результат:
"grape grape satsuma"
( ПРИМЕЧАНИЕ : я знаю, что самый простой подход в этом случае состоит в том, чтобы извлечь только "виноград" и "сацума", но для целей анализа я предпочитаю этот способ)
Отредактировано с предоставлением всей проблемы
Вся проблема в следующем: для фрейма данных d
, содержащего столбец со строкой, функция должна возвращать тот же столбец только с совпадениями:
> d
# A tibble: 2 x 2
string_column c2
<chr> <dbl>
1 apples grape banana satsuma 3
2 grape banana satsuma melon 4
Используя ответ, предоставленный @ d.r works:
> d %>%
+ mutate_at(vars(string_column), ~ gsub("(grape|satsuma| )(*SKIP)(*FAIL)|.", "", ., perl = TRUE))
# A tibble: 2 x 2
string_column c2
<chr> <dbl>
1 " grape satsuma" 3
2 "grape satsuma " 4
Все ответы, предоставленные на данный момент с использованием пакета stringr
, не возвращают string_column
Это dput
для d
:
d <- structure(list(string_column = c("apples grape banana satsuma",
"grape banana satsuma melon"), c2 = c(3, 4)), row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame"))