使用R中的mutate和case_when()语句将unite()填充为整列

shu251

我有一个名称列表,并为这些名称分配了阈值,以确定我是否适当分配了该名称。

您可以使用以下方法重新创建测试数据集:

df <- data.frame(level1 = c("Eukaryota","Eukaryota","Eukaryota","Eukaryota","Eukaryota"), 
             level2=c("Opisthokonta","Alveolata","Opisthokonta","Alveolata","Alveolata"), 
             level3=c("Fungi","Ciliophora","Fungi","Ciliophora","Dinoflagellata"),
             level4=c("Basidiomycota","Spirotrichea","Basidiomycota","Spirotrichea","Dinophyceae"), 
             value = c("100;5;4;2", "100;100;100;100", "100;80;60;50", "90;50;40;40","100;80;20;0"))

我想使用整洁的诗歌,mutate()case_when()找到通过适当阈值的分类标准。因此,下面整洁的经文声明将阈值分解,然后尝试执行此操作。我的瓶颈

  1. 使用case_when()vsifelse()语句-使用ifelse()可能更合适?
  2. 我不知道如何用连接的level1-levelX填充名为Name_updated的新列目前,unite()不适合,因为这与整个数据集有关。实际上,我有更多的专栏文章,因此如果没有整洁的诗句level1:level3语法,这样做会很痛苦!
df_updated <- df %>% 
  separate(value, c("threshold1","threshold2", "threshold3", "threshold4"), sep =";") %>% 
  mutate(Name_updated = case_when(
    threshold4 >= 50 ~ unite(level1:level4, sep = ";"), #Fill with all taxonomic names to level4
    threshold4 < 50 & threshold3 >= 60 ~ unite(level1:level3, sep = ";"), #If last threshold is <50, only fill with taxonomic names to level3
    threshold4 < 50 & threshold3 < 60 & threshold2 >= 50 ~ unite(level1:level2, sep = ";"), #If thresholds for level 3 and 4 are below, fill only level1;level2
    TRUE ~ level1)) %>% #Otherwise fill with only level 1
  data.frame

所需的输出

> df_updated$Name_updated
# Output of this new list:
Eukaryota
Eukaryota;Alveolata;Ciliophora;Spirotrichea
Eukaryota;Opisthokonta;Fungi;Basidiomycota
Eukaryota;Alveolata
Eukaryota;Alveolata

理想的下一步是编写一个函数,该函数允许用户指定脚本中使用的阈值。因此,我确实需要进行探测/确定什么阈值可以通过。

阿克伦

问题是unite,也是type在中separate编列。默认情况下,convert = FALSE它将是一个character类列

library(dplyr)
library(tidyr)
library(purrr)
library(stringr)
df %>% 
  type.convert(as.is = TRUE) %>%
  separate(value, c("threshold1","threshold2", 
          "threshold3", "threshold4"), sep =";", convert = TRUE) %>% 
  mutate(Name_updated = 
     case_when(
      threshold4 >= 50 ~
         select(., starts_with('level')) %>% 
            reduce(str_c, sep=";"),
       threshold4 < 50 & threshold3 >= 60 ~ 
          select(., level1:level3) %>%
            reduce(str_c, sep=";"), 
       threshold4 < 50 & threshold3 < 60 & threshold2 >= 50 ~ 
          select(., level1:level2) %>% 
            reduce(str_c, sep=";"), 
      TRUE ~ level1))
#  level1       level2         level3        level4 threshold1 threshold2 threshold3 threshold4
#1 Eukaryota Opisthokonta          Fungi Basidiomycota        100          5          4          2
#2 Eukaryota    Alveolata     Ciliophora  Spirotrichea        100        100        100        100
#3 Eukaryota Opisthokonta          Fungi Basidiomycota        100         80         60         50
#4 Eukaryota    Alveolata     Ciliophora  Spirotrichea         90         50         40         40
#5 Eukaryota    Alveolata Dinoflagellata   Dinophyceae        100         80         20          0
#                                 Name_updated
#1                                   Eukaryota
#2 Eukaryota;Alveolata;Ciliophora;Spirotrichea
#3  Eukaryota;Opisthokonta;Fungi;Basidiomycota
#4                         Eukaryota;Alveolata
#5                         Eukaryota;Alveolata

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用mutate_at和case_when将变量名称分配为值

来自分类Dev

循环使用mutate和case_when

来自分类Dev

mutate_all在r中的列表上使用map和case_when / ifelse

来自分类Dev

在 R 中的 dplyr 中使用带有 mutate 和 case_when 的 shift:未按预期工作

来自分类Dev

在R中使用mutate,case_when,any()和all()函数使用Group by

来自分类Dev

用户定义的函数使用mutate和case_when

来自分类Dev

R dplyr与mutate()和case_when()有效地使用cross()

来自分类Dev

结合mutate(across)和case_when以根据条件用0填充多列

来自分类Dev

case_when在mutate管道中

来自分类Dev

如何将映射函数应用于 mutate 和 case_when 函数中的动态列名?

来自分类Dev

R case_when和%in%

来自分类Dev

mutate和case_when:错误的数字和不适用

来自分类Dev

R:使用“ for”循环和“ case_when”检查多个变量。

来自分类Dev

使用 mutate 和 case_when 时从现有列插入值

来自分类Dev

如何在 dplyr mutate() 函数中使用 case_when ?

来自分类Dev

在case_when中如何使用tidydots?

来自分类Dev

如何将case_when与mutate_all一起使用以插入变量值

来自分类Dev

使用group_by和case_when为每个组产生单个值

来自分类Dev

将R中的日期时间数据突变为case_when

来自分类Dev

使用any和all作为对case_when中多个元素的逻辑测试?

来自分类Dev

如何使用case_when函数?我的输出是R中的NA

来自分类Dev

R使用case_when按组跟踪列中的更改

来自分类Dev

如何将case_when和grep一起使用以定义新变量

来自分类Dev

如何使用mutate和if else语句在r中添加另一列?

来自分类Dev

如何在sql和php中的“ SELECT DISTINCT CASE WHEN”语句中使用“ ORDER BY”语句?

来自分类Dev

R如何使用case_when()确定列中的先前值是否大于有序向量中的后续值

来自分类Dev

突变,跨越和case_when

来自分类Dev

一种通过使用查找表而不是case_when替换R中100个唯一值的方法?

来自分类Dev

使用json填充React中的case切换语句

Related 相关文章

  1. 1

    使用mutate_at和case_when将变量名称分配为值

  2. 2

    循环使用mutate和case_when

  3. 3

    mutate_all在r中的列表上使用map和case_when / ifelse

  4. 4

    在 R 中的 dplyr 中使用带有 mutate 和 case_when 的 shift:未按预期工作

  5. 5

    在R中使用mutate,case_when,any()和all()函数使用Group by

  6. 6

    用户定义的函数使用mutate和case_when

  7. 7

    R dplyr与mutate()和case_when()有效地使用cross()

  8. 8

    结合mutate(across)和case_when以根据条件用0填充多列

  9. 9

    case_when在mutate管道中

  10. 10

    如何将映射函数应用于 mutate 和 case_when 函数中的动态列名?

  11. 11

    R case_when和%in%

  12. 12

    mutate和case_when:错误的数字和不适用

  13. 13

    R:使用“ for”循环和“ case_when”检查多个变量。

  14. 14

    使用 mutate 和 case_when 时从现有列插入值

  15. 15

    如何在 dplyr mutate() 函数中使用 case_when ?

  16. 16

    在case_when中如何使用tidydots?

  17. 17

    如何将case_when与mutate_all一起使用以插入变量值

  18. 18

    使用group_by和case_when为每个组产生单个值

  19. 19

    将R中的日期时间数据突变为case_when

  20. 20

    使用any和all作为对case_when中多个元素的逻辑测试?

  21. 21

    如何使用case_when函数?我的输出是R中的NA

  22. 22

    R使用case_when按组跟踪列中的更改

  23. 23

    如何将case_when和grep一起使用以定义新变量

  24. 24

    如何使用mutate和if else语句在r中添加另一列?

  25. 25

    如何在sql和php中的“ SELECT DISTINCT CASE WHEN”语句中使用“ ORDER BY”语句?

  26. 26

    R如何使用case_when()确定列中的先前值是否大于有序向量中的后续值

  27. 27

    突变,跨越和case_when

  28. 28

    一种通过使用查找表而不是case_when替换R中100个唯一值的方法?

  29. 29

    使用json填充React中的case切换语句

热门标签

归档