美文网首页
R语言学习-dplyr包

R语言学习-dplyr包

作者: 米粥的味道 | 来源:发表于2019-12-10 13:47 被阅读0次

    不成系统学习的好处,是会根据所需要的通过检索一个个解决问题,但耽误的时间不一定少;系统学习的缺点就是一开始可能会无聊的坚持不下去。在处理数据时,觉得头疼的数据,其实dplyr包就可以简洁的解决掉,太赞了。

    来源于:dplyr 包的强大之处R语言必学包之dplyr包
    主要函数

    -select、rename、filter、mutate, transmute、group_by、summarize

    选择
    select函数
    • starts_with(match, ignore.case = TRUE, vars = current_vars()): 列名以前缀开始;
    • ends_with(match, ignore.case = TRUE, vars = current_vars()): 列名以后缀结束;
    • contains(match, ignore.case = TRUE, vars = current_vars()): 列名中包含指定字符串;
    #选取变量名中包含etal的列  
    select(iris, contains("etal")) 
    
    • matches(match, ignore.case = TRUE, vars = current_vars()): 列名匹配正则表达式;
    #正则表达式匹配,返回变量名中包含ta的列  
    select(iris, matches(".ta."))  
    
    • num_range(prefix, range, width = NULL, vars = current_vars()): prefix
      接受一个前缀, range 接受数字序列;
    • one_of(…, vars = current_vars()): 列名包含在其中;
    • everything(vars = current_vars()): 所有的列名.
    rename函数

    这里需要注意的是, 我们使用 select 函数则在结果中只会保留选择的列.
    如果我们只是需要对特定列进行重命名, 而需要保留原来其他的列, 则可以使用 rename 函数.
    iris %>% rename(sp.name = Species)
    rename(iris,sp.name = Species)

    筛选: filter() 和slice()函数

    可以按给定的逻辑条件筛选出符合要求的子数据集;

    • filter()
    #过滤出cyl == 8的行  
    filter(mtcars, cyl == 8)  
    filter(mtcars, cyl < 6)  
    #过滤出cyl < 6 并且 vs == 1的行  
    filter(mtcars, cyl < 6 & vs == 1)  
    filter(mtcars, cyl < 6, vs == 1)  
    #过滤出cyl < 6 或者 vs == 1的行  
    filter(mtcars, cyl < 6 | vs == 1)  
    #过滤出cyl 为4或6的行  
    filter(mtcars, cyl %in% c(4, 6))  
    
    • slice()
      slice() 函数通过行号选取数据。
    #选取第一行数据  
    slice(mtcars, 1L)  
    filter(mtcars, row_number() == 1L)  
    #选取最后一行数据  
    slice(mtcars, n())  
    filter(mtcars, row_number() == n())  
    #选取第5行到最后一行所有数据  
    slice(mtcars, 5:n())  
    filter(mtcars, between(row_number(), 5, n()))  
    
    改变列值

    mutate 函数会保留修改后的列和修改之前的列,
    transmute 函数则会保留修改后的列而丢弃修改之前的列

    • 可以用于 mutate 和 transmute 函数还有许多辅助函数:
      log(), log2(), log10(): 对值求 log;
      lead(), lag(): 返回序列中当前位置前第几个值或后第几个值;
      row_number(): 结果等于 rank(ties.method = "first"), 即对于相同的数值的排名按照先后顺序排;
      min_rank(): 结果等于 `rank(ties.method = "min"), 即对于相同的数值的排名都取最小的排名;
      dense_rank(): 结果类似于 min_rank(), 差别在于填充了由于 min_rank 造成的排名空隙;
      percent_rank(): 把 min_rank() 的值转换为 0 到 1 区间;
      cume_dist(): 计算比当前值还小的值的比例, 相当于计算 density;
      ntile(): 把数据分成若干块, 看每个数据在具体拿一个块;
      cumsum(), cummean(), cummin(), cummax(), cumany(), cumall(): 累积地 (cumulative) 计算和 (sum), 均值 (mean), 最小值 (min), 最大值 (max), 任何为真 (any), 所有为真 (all);
      na_if(): 把特定地值转换为 NA;
      coalesce(): 找出若干列中第一个不为 NA 的值;
      if_else(): 向量化的 ifelse 函数的效果.
      recode: 把一系列值转换为其他值
      case_when: 多条件选择
    分割-应用-整合

    可以使用 group_by 和 summarize 函数来获得iris每个物种的每一种属性的均值

    • 众多的函数可以用于 summarize 函数.
      mean(), median(), max(), min(), sd(),
      IQR(), mad() 等统计函数.
      first(), last(), nth(): 返回第几位的值.
      n(): 计算数据的数量, 相当于 length() 函数.
      n_distinct(): 计算非重复数据的数量, 相当于 length(unique(x)).
      any(), all(): 逻辑计算函数
    排序

    arrange 函数对数据进行从小到大排序.
    desc 函数可以实现从大到小排序

    #以cyl和disp联合升序排序
    arrange(mtcars, cyl, disp)
    #以disp降序排序
    arrange(mtcars, desc(disp))
    
    去重: distinct

    distinct()用于对输入的tbl进行去重,返回无重复的行

    df <- data.frame(
      x = sample(10, 100, rep = TRUE),
      y = sample(10, 100, rep = TRUE)
    )
    #以全部两个变量去重,返回去重后的行数
    nrow(distinct(df))
    nrow(distinct(df, x, y))
    #以变量x去重,只返回去重后的x值
    distinct(df, x)
    #以变量y去重,只返回去重后的y值
    distinct(df, y)
    #以变量x去重,返回所有变量
    distinct(df, x, .keep_all = TRUE)
    #以变量y去重,返回所有变量
    distinct(df, y, .keep_all = TRUE)
    #对变量运算后的结果去重
    distinct(df, diff = abs(x - y))
    

    待补充dplyr包后续学习:R语言必学包之dplyr包

    大佬新作dtplyr:当优秀的语法遇上牛批的速度

    相关文章

      网友评论

          本文标题:R语言学习-dplyr包

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