生信小白菜之关于mutate函数的一切

R for Data Science

准备包和示例数据

library(dplyr)
library(nycflights13)

mutate()函数 基本用法

# 作用是添加新列,新列是由原有数据计算的来
# 添加的新列在数据集的最后

# 举例
flights_sml <- select(flights,year:day,ends_with("delay"),distance,air_time)
mutate(flights_sml,
       gain=arr_delay-dep_delay,
       speed=distance/air_time*60)
# 第二个及后面的参数是新列的名称以及运算方式,运算数据则是源于先前的列
# 会返回添加新列后的数据框,但是右侧environment里面的数据框并没有发生改变
# 如果想让改变保存,就需要赋值

# 一旦创建,新列就可以直接使用
mutate(flights_sml,
       gain=arr_delay-dep_delay,
       hours=air_time/60,
       gain_per_hour=gain/hours)

# 如果你只要新列的数据返回
# 那么可以用transmute()函数
transmute(flights,
          gain=arr_delay-dep_delay,
          hours=air_time/60,
          gain_per_hour=gain/hours)

创建新变量有多种函数,可以和mutate()搭配使用

创建新变量的函数必须遵循:输入和输出皆为向量,并且输入与输出的向量具有同样数目的分量

算术运算

# 运算符号: +; -; *; /; ^;
# 遵循“循环法则”,即如果一个参数比另一个参数短,那么前者会自动循环扩充至同样的长度

# 算数运算常与聚集函数结合
# 例如 
# x / sum(x) 计算各部分在总数中的比例; 
# y - mean(y) 计算各部分与均值之间的差

模运算

# %/% 整数除法
# %% 求余数除法
# 即 x == y * (x %/% y) + (x %% y)

# 模运算的作用是拆分整数
# 例如:计算dep_time的hour和minute
transmute(flights,
          dep_time,
          hour=dep_time %/% 100,
          minute=dep_time %% 100)

对数函数

# 但你要处理横跨多个数量级的数据时
# 取对数是非常有用的,将一个数量级转为对数标度的一个单位
# 常用 log() log2() log10()

偏移函数

# lead() 返回一个序列的领先值
# lag() 返回一个序列的滞后值

# 与group_by()结合非常有用

累加和滚动聚合

# 累加和 
cumsum()

# 累加积 
cumprod()

# 累加最小值
cummin()

# 累加最大值
?cummax()

# 累加均值
cummean()

x <- 1:10
cumsum(x)
cumprod(x)

cummin(c(3:1, 2:0, 4:2))

cummax(c(3:1, 2:0, 4:2))

# 如果想计算滚动聚合(即滚动窗口求和),那么可以尝试RccpRoll包

逻辑比较

# 逻辑运算符:< <= > >= !=

# 如果需要进行一系列复杂的运算,那么最好把中间结果保存在新变量中
# 这样方便检查是否每一步都符合预期

排秩

# 排秩函数有很多
# 以最简单且常用的min_rank()为例
# 默认的排秩方式是:最小的值获得最前面的名次
# 使用desc(x)使最大值获得前面的名次

y<-c(1,2,2,NA,3,4)
min_rank(y) # 1  2  2 NA  4  5
min_rank(desc(y)) # 5  3  3 NA  2  1

# min_rank()的变体:
# row_number() 
# dense_rank()
# percent_rank()
# cume_dist()
# ntile()

mutute()练习题

# 将dep_time、sched_dep_time转为方便阅读表达形式,例如从午夜开始的分钟数
transmute(flights,
          dep_hour = dep_time %/% 100,
          dep_min = dep_time %% 100,
          dep_hour_min = paste0(dep_hour,":",dep_min)) # 另一个同理

# 比较 air_time arr_time - dep_time
transmute(flights,
          air_time,
          travel_time=arr_time - dep_time)
# 可以发现旅途时间大于空中时间,可能因为起飞降落都比较耗时,或者中间有换乘

# 比较dep_time、sched_dep_time和dep_delay,这三个数值之间具有何种关系
transmute(flights,
          dep_time,
          sched_dep_time,
          dep_delay)
# sched_dep_time + dep_delay == dep_time

# 用排秩函数找出10个延误时间最长的航班
flights_late<-mutate(flights,
                     late = min_rank(desc(arr_delay)))
flights_late <- arrange(flights_late,late)
select(flights_late,tailnum,arr_delay,late,everything())

# 1:3 + 1:10 会返回什么,为什么
1:3 + 1:10 # 2  4  6  5  7  9  8 10 12 11
# 因为算术运算会循环补齐

# R提供了哪些三角函数
sin()
cos()
tan()

# 反三角函数
asin()
acos()
atan()

因为模运算和迁移函数那块我也没懂,所以没怎么拓展

相关推荐

  1. 小白菜关于mutate函数一切

    2024-04-02 18:16:02       3 阅读
  2. 差异分析

    2024-04-02 18:16:02       20 阅读
  3. 关于python vue influxdb一切 笔记

    2024-04-02 18:16:02       29 阅读

最近更新

  1. 【QEMU系统分析之启动篇(九)】

    2024-04-02 18:16:02       0 阅读
  2. 前端实现以及个人理解

    2024-04-02 18:16:02       0 阅读
  3. 关于一维和二维数据的简单转化问题(pandas库)

    2024-04-02 18:16:02       0 阅读
  4. 原版Win7 本地离线安装.netframework 4.8

    2024-04-02 18:16:02       0 阅读
  5. MyEclipse tomcat debug 断点看不到变量值

    2024-04-02 18:16:02       0 阅读

热门阅读

  1. 什么是App分发?那些分发平台可以选择?

    2024-04-02 18:16:02       3 阅读
  2. Vue tableList:<any>[]介绍

    2024-04-02 18:16:02       2 阅读
  3. python中的浅拷贝和深拷贝

    2024-04-02 18:16:02       5 阅读
  4. go中继承、多态的模拟实现

    2024-04-02 18:16:02       3 阅读
  5. Go build 交叉编译-实现多平台兼容

    2024-04-02 18:16:02       3 阅读
  6. 【无标题】

    2024-04-02 18:16:02       1 阅读
  7. 页面中的图片,以后可不能随便使用了!

    2024-04-02 18:16:02       2 阅读
  8. 常见的两种git工作流分支模型

    2024-04-02 18:16:02       3 阅读
  9. C语言经典面试题目(二十四)

    2024-04-02 18:16:02       3 阅读
  10. Android 使用LeakCanary检测内存泄漏,分析原因

    2024-04-02 18:16:02       4 阅读
  11. 【Python进阶(三)】——面向对象编程

    2024-04-02 18:16:02       5 阅读