如何在r中使用gsub()替换多个模板


R 中的gsub()函数可用于替换 R 中字符串中出现的所有特定模式。

要一次替换多个模型,您可以使用嵌套的gsub()语句:

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

然而,更快的方法是stringi包中的stri_replace_all_regex()函数,它使用以下语法:

 library (stringi)

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

以下示例展示了如何在实践中使用每种方法。

方法一:用嵌套的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 均已替换为新值。

方法二:用stringi替换多个模型

替换多个模式的一种更快的方法是使用stringi包中的stri_replace_all_regex()函数。

下面的代码展示了如何使用这个函数:

 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 中执行其他常见操作:

如何在R中使用replace()函数
如何有条件地替换R数据框中的值

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注