#r #regex #stringr
#r #регулярное выражение #stringr
Вопрос:
Я хочу заменить значения столбца x s1_
, s2_
, s9_
и s10_
на s01_
, s02_
, s09_
и s10_
. Я могу легко сделать это для каждого случая (например s1_
), но не для всех (мои знания регулярных выражений короткие). Как я могу выполнить все эти замены, не повторяясь?
library(tidyverse)
df <- tibble( x = c('s1_', 's2_', 's9_', 's10_'))
pattern <- 's1_'
replacement <- 's01_'
stringr::str_replace(df$x, pattern, replacement)
#> [1] "s01_" "s2_" "s9_" "s10_"
Created on 2020-11-12 by the reprex package (v0.3.0)
Ответ №1:
Опция с gsubfn
library(gsubfn)
df$x <- gsubfn("(\d )", ~sprintf('d', as.numeric(x)), df$x)
Аналогично gsubfn
, str_replace
замена может принимать функцию
library(stringr)
str_replace(df$x, "\d ", function(x) sprintf('d', as.numeric(x)))
#[1] "s01_" "s02_" "s09_" "s10_"
Или с dplyr
library(dplyr)
df %>%
mutate(x = str_replace(x, "\d ",
purrr::as_mapper(~ sprintf('d', as.numeric(.x)))))