【问题标题】:select value contain specific string for new columns选择值包含新列的特定字符串
【发布时间】:2021-12-01 13:54:13
【问题描述】:

例如,我有一个df,如下所示,我想创建一个带有特定string 的新列

df <- data.frame(name1 = c("Amydrium sp. 01", "Aporosa sp.", "Arecaceae sp. 02","Adenia macrophylla"))
             name1
1  Amydrium sp. 01
2      Aporosa sp.
3 Arecaceae sp. 02
4 Adenia macrophylla

我想要另外 2 个名为 familygenus 的列

我可以通过检测ceae 字符串(即df %&gt;% mutate(family = case_when(str_detect(name1, "ceae") ~ name1)))来制作family 列。

对于genus 列,我可以获得检测sp.exclude ceae 的语法,并且不想使用多个具有全名的单元格,即Adenia macrophyll 同时获取列吗?。

-期望的输出

             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

【问题讨论】:

    标签: r string tidyverse


    【解决方案1】:

    反其道而行之,同时寻找sp.

    df %>%
      mutate(
          family = case_when(str_detect(name1, "ceae")  ~ name1),
          genus  = case_when((!str_detect(name1, "ceae") & str_detect(name1, "sp.")) ~ name1)
      )
    

    输出:

                   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>
    

    【讨论】:

    • 我刚刚编辑了我的问题
    • @Anh 编辑了我的答案:)
    • 如果我想用case_when 来做这可能吗?
    • @Anh 已经在使用case_when...
    • 哦,对不起:D。谢谢,我没仔细看:)))))
    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 2015-10-17
    • 2019-10-22
    • 2016-02-11
    • 2017-03-16
    • 2017-09-24
    • 2021-09-15
    • 2013-09-27
    相关资源
    最近更新 更多