美文网首页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