如何修改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_else
或 case_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
我正在尝试标准化数据框中的物种名称。我正在使用 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_else
或 case_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