dplyr 条件变异与 ifelse
dplyr conditional mutate with ifelse
我想让这个声明更通用
mutate(across(
Kingdom:Genus,
~ ifelse(.x == "Incertae sedis", "*Incertae sedis*", .x)
))
如何以更通用的方式表示“* Incertae sedis *”?基本上我想在 .x
中的字符串的开头和结尾添加一个星号
您可以使用 paste0
:
mutate(across(
Kingdom:Genus,
~ ifelse(.x == "Incertae sedis", paste0("*", .x, "*"), .x)
))
如果您有多个要突出显示的术语,您可以先在向量中定义它们,然后改用它:
uncertain <- c("Incertae sedis", "Problematica", "Nomem Dubium")
df %>% mutate(across(
Kingdom:Genus,
~ ifelse(.x %in% uncertain, paste0("*", .x, "*"), .x)
))
请注意这是实验性的:
@Allan Cameron 的回答最好用 paste0
但我想分享这个:str_pad
# fake dataframe
df <- tribble(
~A, ~B, ~C,
"Incertae sedis", "blabla", "Incertae sedis",
"Incertae sedis", "blabla", "bloblo",
"Incertae", "Incertae sedis", "blibli"
)
library(dplyr)
library(stringr)
df %>%
mutate(across(A:C, ~ifelse(. == "Incertae sedis", str_pad(., nchar(.)+2, "both", pad="*"), .)))
A B C
<chr> <chr> <chr>
1 *Incertae sedis* blabla *Incertae sedis*
2 *Incertae sedis* blabla bloblo
3 Incertae *Incertae sedis* blibli
一个选项是使用正则表达式
插入*
library(dplyr)
library(stringr)
df %>%
mutate(across(Kingdom:Genus, ~str_replace(.x, "(Incertae sedis)", "*\1*")))
我想让这个声明更通用
mutate(across(
Kingdom:Genus,
~ ifelse(.x == "Incertae sedis", "*Incertae sedis*", .x)
))
如何以更通用的方式表示“* Incertae sedis *”?基本上我想在 .x
中的字符串的开头和结尾添加一个星号您可以使用 paste0
:
mutate(across(
Kingdom:Genus,
~ ifelse(.x == "Incertae sedis", paste0("*", .x, "*"), .x)
))
如果您有多个要突出显示的术语,您可以先在向量中定义它们,然后改用它:
uncertain <- c("Incertae sedis", "Problematica", "Nomem Dubium")
df %>% mutate(across(
Kingdom:Genus,
~ ifelse(.x %in% uncertain, paste0("*", .x, "*"), .x)
))
请注意这是实验性的:
@Allan Cameron 的回答最好用 paste0
但我想分享这个:str_pad
# fake dataframe
df <- tribble(
~A, ~B, ~C,
"Incertae sedis", "blabla", "Incertae sedis",
"Incertae sedis", "blabla", "bloblo",
"Incertae", "Incertae sedis", "blibli"
)
library(dplyr)
library(stringr)
df %>%
mutate(across(A:C, ~ifelse(. == "Incertae sedis", str_pad(., nchar(.)+2, "both", pad="*"), .)))
A B C
<chr> <chr> <chr>
1 *Incertae sedis* blabla *Incertae sedis*
2 *Incertae sedis* blabla bloblo
3 Incertae *Incertae sedis* blibli
一个选项是使用正则表达式
插入*
library(dplyr)
library(stringr)
df %>%
mutate(across(Kingdom:Genus, ~str_replace(.x, "(Incertae sedis)", "*\1*")))