美文网首页js css html
R for Data Science(笔记) ---根据条件创建

R for Data Science(笔记) ---根据条件创建

作者: 生信小鹏 | 来源:发表于2022-11-29 13:07 被阅读0次
    R for Data Science

    tidy流处理数据的方便,我想这与管道符%>% 的使用,数据处理动词化,有着很重要的关系。

    这是之前做数据清洗时,用到比较重要的一些技能和方法。

    R for Data Science(笔记) ---数据变换(filter使用)
    R for Data Science(笔记) ---数据变换(select基础使用)
    R for Data Science(笔记) ---数据变换(select组合其他函数)
    R for Data Science(笔记) ---数据变换(创建新的变量)
    R for Data Science(笔记) ---数据变换(行排序)
    R for Data Science(笔记) ---数据变换(归纳总结)
    R for Data Science(笔记) ---数据整理(Pivot相关函数)
    R for Data Science(笔记) ---数据整理(分列和合并)

    上面这些技能基本是足够的了,但是这次主要是记录,根据其他行列的条件,创建新的变量的方法。使用到的函数是mutate函数,配合case_when函数进行。这种根据条件,创建新变量,也可以使用ifelse函数完成,但是一旦条件多了,容易把自己绕晕。

    使用场景

    某个基因按照表达水平高低,分为了高低表达组,同时按照突变与否,变为突变组和非突变组。在上面两组分类的基础上,再创建一个组别,就是表达组和突变组的两两组合,也就是4种情况。

    使用ifelse()层层嵌套,不直观,使用case_when()函数,就会显而易见。

    数据特点

    用R的示例数据,容易举一反三。

    library(tidyverse)
    data(starwars)
    

    实战

    starwars %>%
      select(name:mass, gender, species) %>%
      mutate(
        type = case_when(
          height > 200 | mass > 200 ~ "large",
          species == "Droid"        ~ "robot",
          TRUE                      ~ "other"
        )
      )
    

    结果如下

    # A tibble: 87 × 6
       name               height  mass gender    species type 
       <chr>               <int> <dbl> <chr>     <chr>   <chr>
     1 Luke Skywalker        172    77 masculine Human   other
     2 C-3PO                 167    75 masculine Droid   robot
     3 R2-D2                  96    32 masculine Droid   robot
     4 Darth Vader           202   136 masculine Human   large
     5 Leia Organa           150    49 feminine  Human   other
     6 Owen Lars             178   120 masculine Human   other
     7 Beru Whitesun lars    165    75 feminine  Human   other
     8 R5-D4                  97    32 masculine Droid   robot
     9 Biggs Darklighter     183    84 masculine Human   other
    10 Obi-Wan Kenobi        182    77 masculine Human   other
    # … with 77 more rows
    

    这是根据几个指标,创建新的变量指标

    深入

    case_when不是tidy类函数的内置函数,因此要使用类似tidy类似的语法,可以自己写一个函数,然后嵌入。

    同样上面的例子

    case_character_type <- function(height, mass, species) {
      case_when(
        height > 200 | mass > 200 ~ "large",
        species == "Droid"        ~ "robot",
        TRUE                      ~ "other"
      )
    }
    

    实验一下

    case_character_type(150, 250, "Droid")
    [1] "large"
    
    case_character_type(150, 150, "Droid")
    [1] "robot"
    

    带入刚才的例子,简化代码,得到相同的结果

    starwars %>%
      mutate(type = case_character_type(height, mass, species))
    

    相关文章

      网友评论

        本文标题:R for Data Science(笔记) ---根据条件创建

        本文链接:https://www.haomeiwen.com/subject/xqfrfdtx.html