如何修改str_replace_all

How to modify str_replace_all

我正在尝试标准化数据框中的物种名称。我正在使用 str_replace_all() 这样做。但是,该函数不是替换旧名称,而是在新名称上添加字符。名称混杂,有些已经正确,有些我需要修复,但我有 30 多个物种名称需要调整。有什么建议吗?

示例代码:

library(tidyverse)

var1 <- c(1:5)
var2 <- c("Nemophila menziesii", "Nemophila menziesii var.menziesii", "Ceanothus cuneatus", "Ceanothus cuneatus var.cuneatus", "Diplacus auranticus")

df <- as.data.frame(var2, var1)

df %>%
  mutate(var2 = str_replace_all(var2, "Nemophila menziesii", "Nemophila menziesii var.menziesii")) %>%
  mutate(var2 = str_replace_all(var2, "Ceanothus cuneatus", "Ceanothus cuneatus var.cuneatus"))

输出:

                                             var2
1               Nemophila menziesii var.menziesii
2 Nemophila menziesii var.menziesii var.menziesii
3                 Ceanothus cuneatus var.cuneatus
4    Ceanothus cuneatus var.cuneatus var.cuneatus
5                             Diplacus auranticus

第 2 行和第 4 行是我遇到的问题的完美示例。它应该只是“Ceanothus cuneatus var.cuneatus”或“Nemophila menziesii var.menziesii”。

这可能有效 - 如果您将 $ 放在要替换的模式中,它只会在它是变量中的整个字符串时替换它:

library(tidyverse)

var1 <- c(1:5)
var2 <- c("Nemophila menziesii", "Nemophila menziesii var.menziesii", "Ceanothus cuneatus", "Ceanothus cuneatus var.cuneatus", "Diplacus auranticus")

df <- as.data.frame(var2, var1)

df %>%
  mutate(var2 = str_replace_all(var2, "Nemophila menziesii$", "Nemophila menziesii var.menziesii")) %>%
  mutate(var2 = str_replace_all(var2, "Ceanothus cuneatus$", "Ceanothus cuneatus var.cuneatus"))

#>                                var2
#> 1 Nemophila menziesii var.menziesii
#> 2 Nemophila menziesii var.menziesii
#> 3   Ceanothus cuneatus var.cuneatus
#> 4   Ceanothus cuneatus var.cuneatus
#> 5               Diplacus auranticus

在原始示例中,str_replace_all 在第 2 行和第 4 行的字符串中完美地找到模式,并用替换字符串替换它们。但这种情况发生在 字符串中,并保留了后缀。上面的语法表示“仅当它后面不包含任何内容时才查找模式”。

您可能想到的是一种 if_elsecase_when 替换设置?像下面一样,它测试整个字符串匹配并给出相同的输出:

df %>%
  mutate(var2 = case_when(
    var2 == "Nemophila menziesii" ~ "Nemophila menziesii var.menziesii",
    var2 == "Ceanothus cuneatus" ~ "Ceanothus cuneatus var.cuneatus",
    TRUE ~ var2))

#>                                var2
#> 1 Nemophila menziesii var.menziesii
#> 2 Nemophila menziesii var.menziesii
#> 3   Ceanothus cuneatus var.cuneatus
#> 4   Ceanothus cuneatus var.cuneatus
#> 5               Diplacus auranticus

reprex package (v2.0.1)

创建于 2022-03-18