Используя строку пакета tidyverse, я смог заставить ваши данные выглядеть так, как вы хотите, с двумя вызовами функций, разделенными вертикальной чертой. Канал поступает из пакета magrittr, который загружается с dplyr и / или tidyverse.
Я использовал stringr :: str_replace_all для выполнения двух подстановок, удаляющих слова, которые вы хотели убрать. Обратите внимание на синтаксис для множественных замен в этой функции.
str_replace_all( c( "first string to get rid of" = "string to replace it with", "second string to get rid of" = "second replacement string")
Вам может показаться более интуитивным объединение всех "избавиться от строк" сначала с последующим объединением заменяющих строк, но каждый элемент в пределах c () - заменяемая строка (в кавычках), связанная с ее заменой (также в кавычках) на "=". Каждая из этих пар replace = замена разделяется запятой.
Используя str_replace, я сначала вынул весь текст, который начинается с «,» и заканчивается на «,)», используя это регулярное выражение », [az] +, \\ ("который относится к запятой, за которой следует любое количество строчных букв и пробелов (что позволяет обнаруживать фрагменты с несколькими словами), за которым следует", (". Обратите внимание на экранирование для" (". Если вы подумали, вместо этого вы можете использовать заглавные буквы [a-zA-Z]. В любом случае обратите внимание на пробел перед "]".
Потому что вы хотели убрать слово, но не запятую перед я заменил удаленный текст на «,».
Это не удаляет «красные яблоки» в первой строке, потому что она не следует за запятой. Выражение «^ [az] +, \ \ ("относится к любому количеству строчных букв и пробелов, стоящих перед", ("в начале строки (^" привязывает "ваш шаблон к началу строки). Поэтому он удаляет" красные яблоки "или любые другие пример, где т ext, который вы хотите удалить, запускает строку. В этих случаях имеет смысл заменить его ничем (""), потому что вы хотите, чтобы первый символ оставшейся строки появлялся в начале.
Вместе эти две замены удаляют оскорбительный текст, независимо от того, начинается ли он строка либо находится в ее середине, либо заканчивается в этом смысле более или менее обобщенно.
str_remove_all ("\\)") удаляет правые круглые скобки по всему тексту
library(stringr)
library(magrittr)
df<-c("red apples,(golden,red delicious),bananas,(cavendish,lady finger),
golden pears","yellow pineapples,red tomatoes,(roma,vine),orange carrots")
str_replace_all(df, c(",[a-z ]+,\\(" = ",",
"^[a-z ]+,\\(" = "")) %>%
str_remove_all("\\)")
[1] "golden,red delicious,cavendish,lady finger,golden pears"
[2] "yellow pineapples,roma,vine,orange carrots"