Как заменить однозначные числа на двухзначные числа, используя stringr в R

#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)))))