Как использовать gsub() в r для замены нескольких шаблонов


Функцию gsub() в R можно использовать для замены всех вхождений определенного шаблона в строку в R.

Чтобы заменить несколько моделей одновременно, вы можете использовать вложенный оператор gsub() :

 df$col1 <- gsub(' old1 ', ' new1 ',
           gsub(' old2 ', ' new2 ',
           gsub(' old3 ', ' new3 ', df$col1)))

Однако гораздо более быстрый метод — это функция stri_replace_all_regex() из пакета stringi , которая использует следующий синтаксис:

 library (stringi)

df$col1 <- stri_replace_all_regex(df$col1,
                                  pattern=c(' old1 ', ' old2 ', ' old3 '),
                                  replacement=c(' new1 ', ' new2 ', ' new3 '),
                                  vectorize= FALSE )

Следующие примеры показывают, как использовать каждый метод на практике.

Способ 1. Замените несколько шаблонов вложенной функцией gsub().

Предположим, у нас есть следующий кадр данных в R:

 #create data frame
df <- data. frame (name=c('A', 'B', 'B', 'C', 'D', 'D'),
                 dots=c(24, 26, 28, 14, 19, 12))

#view data frame
df

  name points
1 to 24
2 B 26
3 B 28
4 C 14
5 D 19
6 D 12

Мы можем использовать вложенный оператор gsub() для замены нескольких шаблонов в столбце имени :

 #replace multiple patterns in name column
df$name <- gsub(' A ', ' Andy ',
           gsub(' B ', ' Bob ',
           gsub(' C ', ' Chad ', df$name)))

#view updated data frame
df

  name points
1Andy 24
2 Bob 26
3 Bob 28
4 Chad 14
5 D 19
6 D 12

Обратите внимание, что A, B и C в столбце имени заменены новыми значениями.

Способ 2. Замените несколько моделей стрингами.

Гораздо более быстрый способ заменить несколько шаблонов — использовать функцию stri_replace_all_regex() из пакета stringi .

Следующий код показывает, как использовать эту функцию:

 library (stringi)

#replace multiple patterns in name column
df$name <- stri_replace_all_regex(df$name,
                                  pattern=c(' A ', ' B ', ' C '),
                                  replacement=c(' Andy ', ' Bob ', ' Chad '),
                                  vectorize= FALSE )

#view updated data frame
df

  name points
1Andy 24
2 Bob 26
3 Bob 28
4 Chad 14
5 D 19
6 D 12

Обратите внимание, что результирующий фрейм данных соответствует кадру из предыдущего примера.

Если ваш фрейм данных хотя бы умеренно велик, вы заметите, что эта функция работает намного быстрее, чем функция gsub() .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в R:

Как использовать функцию replace() в R
Как условно заменить значения в кадре данных R

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *