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端处理数据,提高一定的性能  

     

    借鉴原文

  • 相关阅读:
    课堂作业04 2017.10.27
    课程作业 03 动手动脑 2017.10.20
    课程作业 03 2017.10.20
    HDU 3974 Assign the task
    POJ 2155 Matrix
    POJ 2481 Cows
    HDU 3038 How Many Answers Are Wrong
    CS Academy Array Removal
    POJ_1330 Nearest Common Ancestors LCA
    CF Round 427 D. Palindromic characteristics
  • 原文地址:https://www.cnblogs.com/qiaoyihang/p/7340148.html
Copyright © 2011-2022 走看看