zoukankan      html  css  js  c++  java
  • dplyr快速入门

     RStudio Blog 介绍dplyr 包已发布 (Introducing dplyr), 此包将原本 plyr 包中的 ddply() 等函数进一步分离强化, 专注接受dataframe对象, 大幅提高了速度, 并且提供了更稳健的与其它数据库对象间的接口,还是Hadley Wickham 的新作, 并自称 a grammar of data manipulation。 由此看来,dplyr包是plyr包的加强版。

    初始化安装

    install.packages("dplyr")  

    数据集类型

    将过长过大的数据集转换为显示更友好的 tbl_df 类型:

    hflights_df <- tbl_df(hflights)

    可以 hflights_df 感受一下不再被刷屏的感觉.

    五种常用的基本操作

    测试数据集

    library(data.table)
    CARS = data.table(cars)
    X=data.table(speed=c(4,7,8),type=c("small","middle","large"))
    dt <- CARS[X,on='speed']
    tables()
    
    dt
    #     speed dist   type
    # 1:     4    2  small
    # 2:     4   10  small
    # 3:     7    4 middle
    # 4:     7   22 middle
    # 5:     8   16  large

    1、筛选: filter() 按给定的逻辑判断筛选出符合要求的子数据集, 类似于 base::subset() 函数 例如:

    # 滤过行
    filter(dt,speed %in% c(4,7))
    filter(dt,speed==4|speed==7)
    
    注意: 表示 AND 时要使用 & 而避免 &&

    2、排列: arrange()

    arrange(dt,dist,desc(speed))

    3、选择: select()

    starts_with(x,ignor.case = TRUE) # 选择以字符x开头的变量 
    ends_with(x,ignore.case = TRUE) # 选择以字符x结尾的变量 
    contains(x,ignore.case = TRUE) #选择所有包含x的变量 
    matches(x,ignore.case = TRUE) #选择匹配正则表达式的变量 
    num_range(“x”,1:5,width = 2) #选择从x01到x05的数值型变量 
    one_of(“x”,”y”,”z”) #选择包含在声明变量中的变量 
    everything() #选择所有变量,一般调整数据集中变量顺序时使用 

    用列名作参数来选择子数据集:

    select(dt,speed)
    
    还可以用 : 来连接列名, 没错, 就是把列名当作数字一样使用:
    select(dt,speed:dist)
    
    用 - 来排除列名:
    select(dt,-dist)
    
    同样类似于R自带的 subset() 函数 (但不用再写一长串的 c("colname1", "colname2") 或者 which(colname(data) == "colname3"), 甚至还要去查找列号)

    4、变形: mutate() 对已有列进行数据运算并添加为新列:

    mutate(dt,total=speed+2)

    5、汇总: summarise()

    对数据框调用其它函数进行汇总操作, 返回一维的结果:
    summarise(dt, delay = mean(dist, na.rm = TRUE))
     等同于 plyr::summarise(), 原文说该函数功能尚不是非常有用, 大概以后的更新会加强吧.

    分组动作 group_by()

    以上5个动词函数已经很方便了, 但是当它们跟分组操作这个概念结合起来时, 那才叫真正的强大! 当对数据集通过 group_by() 添加了分组信息后,mutate(), arrange() 和 summarise() 函数会自动对这些 tbl 类数据执行分组操作 (R语言泛型函数的优势).

    另: 一些汇总时的小函数

    n(): 计算个数 n_distinct(): 计算 x 中唯一值的个数. (原文为 count_distinct(x), 测试无用) first(x), last(x) 和 nth(x, n): 返回对应秩的值, 类似于自带函数 x[1], x[length(x)], 和 x[n] 注意: 分组计算得到的统计量要清楚样本已经发生了变化, 此时的中位数是不可靠的

    n_distinct(select(dt,speed))
    summarise(group_by(dt,type),total=sum(dist))

    连接符 %>% 包里还新引进了一个操作符, 使用时把数据名作为开头, 然后依次对此数据进行多步操作.

    比如:
    Batting %>%    group_by(playerID) %>%    summarise(total = sum(G)) %>%    arrange(desc(total)) %>%   head(5)
    
    这样可以按进行数据处理时的思路写代码, 一步步深入, 既易写又易读, 接近于从左到右的自然语言顺序, 对比一下用R自带函数实现的:
    
    head(arrange(summarise(group_by(Batting, playerID), total = sum(G)) , desc(total)), 5)
    

    还可以通过src_postgres 映射数据库   tbl 映射数据库表,就相当于在sql端处理数据,提高一定的性能  

     

    借鉴原文

  • 相关阅读:
    SpringCloud Alibaba Nacos详解
    常见设计模式
    Mybatis TypeHandler类型处理器
    Mybatis存取json字段转为Java对象方案
    Spring AOP 切面编程详解
    Spring Data 、Spring Data JPA 、Hibernate之间的关系及SpringDataJPA简单使用
    28张图解 | 互联网究竟是「如何连接,如何进行通信」的?
    Java代码实现 图片添加多行水印且自动换行
    SpringMVC 快速入门
    获取本地磁盘得到.txt文件
  • 原文地址:https://www.cnblogs.com/qiaoyihang/p/7340148.html
Copyright © 2011-2022 走看看