Как записать многократное преобразование одного и того же столбца в одной функции?

#r #dataframe #stringr

#r #фрейм данных #stringr

Вопрос:

У меня есть фрейм данных:

 ID       value
1      he following object is masked from ‘package:purrr’
2      Attaching package: ‘magrittr’
3      package ‘ggplot2’ was built under R version 3.6.2
4      Warning messages:
  

вот код для преобразования значения столбца:

 df <- df %>% 
  mutate(value = stringr::str_replace(value, '(^he following object)', '\1'),
         value = stringr::str_replace(value, '(^Attaching package:)', '\1'),
         value = stringr::str_replace(value, '(^package ‘ggplot2’)', '\1'))
) %>%   
  group_by(ID, value) 
  

вывод:

 ID       value
1      he following object
2      Attaching package: 
3      package ‘ggplot2’
4      Warning messages:
  

Как вы видите, я использую stringr::str_replace несколько раз для одного столбца. мои фактические данные намного больше (например, миллионы строк). это всего лишь пример подмножества. итак, как я мог бы объединить это трехкратное использование этой функции за один раз? я хочу использовать одни и те же функции и библиотеки (без радикальных изменений)

Ответ №1:

Если я правильно понимаю вопрос, вы должны быть в состоянии найти полезным str_replace заменить str_replace_all в своем коде с помощью оператора канала | , чтобы избежать необходимости str_replace многократного вызова в разных строках.

Например.:

 table_patterns <- table %>% 
mutate(value = str_replace_all(value, "(^he following object)|(^Attaching package:)|(^package ‘ggplot2’)", '\1')) %>%   
group_by(ID, value) 
  

Комментарии:

1. спасибо, возможно ли это сделать с помощью функции str_starts()?

2. Основываясь на документации, да, похоже, что это, по сути, выполняет то же регулярное выражение, что и то, что вы пытаетесь сделать здесь. Я пытался дать вам общий шаблон, выходящий за рамки только этого конкретного варианта использования.

3. не могли бы вы показать, как это будет выглядеть с помощью str_starts() ?