R语言如何按列值包含的特定字符串生成family和genus新列
你可以直接在原有mutate()逻辑上补充genus列的判断规则即可,注意匹配sp.时需要对正则元字符.做转义,避免误匹配:
library(tidyverse) # 原始数据框 df <- data.frame(name1 = c("Amydrium sp. 01", "Aporosa sp.", "Arecaceae sp. 02","Adenia macrophylla")) # 新增两列的完整语法 df <- df %>% mutate( family = case_when( str_detect(name1, "ceae") ~ name1, .default = NA_character_ ), genus = case_when( str_detect(name1, "sp\\.") & !str_detect(name1, "ceae") ~ name1, .default = NA_character_ ) )
运行后输出结果与预期完全一致:
name1 family genus 1 Amydrium sp. 01 <NA> Amydrium sp. 01 2 Aporosa sp. <NA> Aporosa sp. 3 Arecaceae sp. 02 Arecaceae sp. 02 <NA> 4 Adenia macrophylla <NA> <NA>
如果你使用的dplyr版本低于1.1.0,不支持.default参数,可以替换为兼容写法:
df %>% mutate( family = case_when( str_detect(name1, "ceae") ~ name1, TRUE ~ NA_character_ ), genus = case_when( str_detect(name1, "sp\\.") & !str_detect(name1, "ceae") ~ name1, TRUE ~ NA_character_ ) )
内容的提问来源于stack exchange,提问作者Anh
相关产品推荐
相关产品推荐

