美文网首页
第一部分探索--第3章 使用dplyr进行数据转换

第一部分探索--第3章 使用dplyr进行数据转换

作者: Hannahhao | 来源:发表于2019-12-17 18:02 被阅读0次

    3.1 简介

    dplyr: 创建新变量或者摘要统计量,或者对变量重命名或排序。

    3.1.1 准备工作

    加载dplyr和数据包 加载dplyrh和nycflight13数据包

    3.1.2 nycflight13

    2013年从纽约市出发的航班信息336 776次航班
    ?flights查看其说明文档

    flights
    • int:整数型变量 integers
    • dbl:实数 doubles or real numbers
    • chr:字符向量/字符串 character vectors or strings
    • dttm:日期+时间型变量 a date+a time
    • lgl:逻辑型变量,仅包括TRUE 和FALSE logical
    • fctr:因子,固定数目的值的分类变量 factor
    • date:日期型变量 dates

    3.1.3 dplyr基础

    5个核心函数+group_by()

    • 按值筛选观测:(filter())
    • 对行进行重新排序 (arrange())
    • 按名称选取变量 (select())
    • 使用现有变量创建新变量 (mutate())
    • 多个值总结为一个摘要统计量 (summarize())
      工作方式:
      (1)第一个参数是一个数据框
      (2)随后参数使用变量名称(不带引号)描述了在数据框进行的操作
      (3)输出结果是一个新数据框

    3.2 使用filter()筛选行

    基础知识

    举例:筛选出1月1日的所有航班

    • 输出结果


      筛选出1月1日的所有航班
    • 筛选后保存--要赋值操作
      > jan1 <- filter(flights, month==1,day==1)
    • 输出结果同时保存变量

    3.2.1 比较运算符

    比较运算符:>, >=, <, <=, !=(不等于), ==(等于)
    near() 近似值用于浮点数

    什么是浮点数
    浮点数就是小数点可以任意浮动的数字。

    在计算机的机器语言中,只有二进制,机器语言只能识别0和1。所以,计算机也是不可能存储小数的,所以需要有另一种变通的存储方案。这种方案就是指数方案:

    3.2.2 逻辑运算符

    • & :与
    • | :或
    • !:非
      布尔运算符
      举例:
      找出11月或12月出发的所有航班 > filter(flights,month==11|month==12)
      找出延误时间(到达或出发)不多于2小时的航班 > filter(flights,!(arr_delay>120|dep_delay>120)); > filter(flights,arr_delay<=120, dep_delay<=120)
      !(x&y) = !x|!y 不等于x和y=既不等于x或不等于y
      !(x|y) = !x&!y 不等于x或y=不等于x和不等于y

    3.2.3 缺失值

    • NA =缺失值=not available,不可用。
    • 缺失值“可传染的”,如果运算中包含了未知值,那么运算结果一般也是未知值。


    • 如果想要确定一个值是否为缺失值,可以使用is.na()函数:is.na(x)
    • filter()只能筛选出条件为TRUE的行;它会排除那些条件为FALSE和NA的行。
    • 若想保留缺失值,可以明确指出is.na(x)

    3.3 使用arrange()排列行

    • 接受一个数据框和一组作为排序依据的列名作为参数。若列名不止一个,那么使用后面的列在前面排序的基础上继续排序。
      > arrange(flights, year,month,day)
    • 使用desc()按列降序排序 > arrange(flights, desc(arr_delay))
    • 缺失值总是排在最后

    3.4 使用select()选择列

    • 按名称选择列
    • 选择"year"和"day"之间的所有列(包括year 和day)
    • 选择不在"year"和"day"之间的所有列(不包括year和day)
    • 辅助函数:
      starts_with("abc"): matches names that begin with “abc”.
      ends_with("xyz"): matches names that end with “xyz”.
      contains("ijk"): matches names that contain “ijk”.
      matches("(.)\\1"): selects variables that match a regular expression. This one matches any variables that contain repeated characters. You’ll learn more about regular expressions in strings.
      num_range("x", 1:3): matches x1, x2 and x3
    • rename()来重命名变量 rename(flights, tali_num=tailnum)
    • select()函数和everything()辅助函数结果使用:将几个变量移到数据框开头select(flights, time_hour, air_time, everything())

    3.5 使用mutate()添加新变量

    基础知识

    • 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)
    
    • transmute()函数:只想保留新变量
      > transmute(flights, gain=arr_delay-dep_delay,hours=air_time/60,gain_per_hour=gain/hours)

    3.5.1 常用创建函数

    • 算数运算符 Arithmetic operators:+, -, *, /, ^
    • 模运算符 Modular arithmetic:%/% (整数除法 integer division) and %% (求余
      remainder), where x == y * (x %/% y) + (x %% y)
    • 对数函数:log(), log2(), log10()
    • 偏移函数:lead(), lag()
    • 累加和滚动聚合:cumsum(), cumprod(), commim(), cummax(), cummean()
    • 逻辑比较:<, <=, >, >=, 和!=
    • 排秩:min_rank(), row_number(), dense_rank(), percent_rank(), cume_dist()

    3.6 使用summarize()进行分组摘要

    summarize: 将数据框折叠成一行。



    summarize()+group_by()

    举例:对按日期分组的一个数据框应用summarize,就可以得到每日平均延误时间

    3.6.1 使用管道组合多种操作

    研究每个目的地的距离和平均延误时间之间的关系。

    • 完成数据准备分3步:
      (1)按照目的地对航班进行分组:by_dest <- group_by(flights, dest)
      (2)进行摘要统计,计算距离,平均延误时间和航班数量:delay <- summarize(by_dest,count=n(), dist=mean(distance, na.rm=TRUE),delay=mean(arr_delay, na.rm = TRUE))
      (3)筛选去除噪声点和火奴鲁鲁加长: delay <- filter(delay, count>20, dest!="HNL")
    • 作图
      ggplot(data = delay, mapping = aes(x=dist, y=delay))+
      geom_point(aes(size=count),alpha=1/3)+
      geom_smooth(se=FALSE)
    > by_dest <- group_by(flights, dest)
    > delay <- summarize(by_dest,count=n(), dist=mean(distance, na.rm=TRUE),delay=mean(arr_delay, na.rm = TRUE))
    > delay <- filter(delay, count>20, dest!="HNL")
    > ggplot(data = delay, mapping = aes(x=dist, y=delay))+
    + geom_point(aes(size=count),alpha=1/3)+
    + geom_smooth(se=FALSE)
    `geom_smooth()` using method = 'loess' and formula 'y ~ x'
    

    na.rm=remove NA

    另一种方法是使用管道“%>%。%>%=然后”

    > delays <- flights %>%
    + group_by(dest)%>%
    + summarize(count=n(),dist=mean(distance, na.rm=TRUE),delay=mean(arr_delay, na.rm = TRUE))%>%
    + filter(count>20,dest!="HNL")
    

    3.6.2 缺失值

    na.rm参数就是在计算前除去缺失值
    示列



    缺失值表示取消的航班,可以先去除取消的航班来解决缺失值问题。


    3.6.3 计数

    一个计数(n())或非缺失值的计数(sum(!is.na())
    举例:查看具有最长平均延误时间的飞机(通过机尾编号进行识别)

    > delays <- not_cancelled%>%
    + group_by(tailnum) %>% 
    + summarize(delay=mean(arr_delay))
    > ggplot(data=delays, mapping = aes(x=delay))+
    + geom_freqpoly(binwidth=10)
    

    航班数量和平均延误时间的散点图

    + group_by(tailnum) %>%
    + summarise(delay=mean(arr_delay, na.rm = TRUE),n=n())
    > ggplot(data = delays, mapping = aes(x=n,y=delay))+
    + geom_point(alpha=1/10)
    
    + filter(n>25) %>% 
    + ggplot(mapping = aes(x=n,y=delay))+
    + geom_point(alpha=1/10)
    

    3.6.4 常用的摘要函数

    • 位置度量
    • 分散程度度量
      sd(x)均方误差(标准误差), IQR(x)四分位距, mad(x)绝对中位差
    • 秩的度量
      min(x), quantile(x,0.25)(找出x中按从小到大顺序大于前25%而小于后75%的值), max(x)
    • 定位度量
      first(x), nth(x,2), last(x)
    • 计数n()
      计算出非缺失值的数量:sum(!is.na(x))
      计算出唯一值的数量:distinct(x)
    • 逻辑值的计数和比例:sum(x>10)和mean(y==0)

    3.6.5 按多个变量分组: group_by()

    循序渐进地进行摘要分析:

    3.6.6 取消分组:ungroup()

    3.6.7 练习

    3.7 分组新变量(和筛选器)

    • 找出每个分组中最差的成员
    • 找出大于某个阈值的所有分组
    • 对数据进行标准化以计算分组指标


    总结

    这章学下来感觉还是有点难度,要懂点数据统计知识,逻辑性要好, 对数据把握好才能进行对的命令运行。

    相关文章

      网友评论

          本文标题:第一部分探索--第3章 使用dplyr进行数据转换

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