美文网首页
R成精-用dplyr高效变换数据和处理数据

R成精-用dplyr高效变换数据和处理数据

作者: 果果哥哥BBQ | 来源:发表于2017-12-16 18:31 被阅读60次

dplyr包介绍

dplyr包是R大神大杰作,Hadley Wickham,被称为一个改变R的人,dplyr是在plyr上升级的又一力作。
dplyr包包含了数据整理、筛选、变换、汇总等多种函数。基本上可以解决数据处理的80%的问题。

基础用法

本文以自己构造的数据集进行演示,以便方便理解。

data1 <- data.frame(id=c(1:10),class=c(1:2),score=c("十","九","八","七","六","五","四","三","二","一")
ennum=c("one","two","three","four","five","ten","nine","eight","seven","six"),type=c("a","b"))
data2 <- rbind(data1,c(10,6,"一","six","b"))


  1. 单表操作
  • 排序 arrange 对变量进行排序,默认为升序,可以用desc()降序排列.
data1 %>% arrange()
data1 %>% arrange(desc(id))
data1 %>% arrange(by=class)
  • 去重distinct,相当于base函数的unique,该函数有一个.keep_all的参数,如果等于FALSE,输出去重的变量。如果等于TRUE,输出全部变量,有多个相同的观测数据,输出第一条数据。
data2 %>% distinct()
data2 %>% distinct(type)
 type
1    a
2    b
data2 %>% distinct(type,.keep_all=TRUE)
id class score ennum type
1  1    15    十   one    a
2  2    14    九   two    b
  • do
  • 条件筛选filter,根据条件变量筛选观察值。
    常用的筛选条件
==, >, >= etc

&, |, !, xor()

is.na()

between(), near()
data2 %>%filter(id==10)
id class score ennum type
1 10     6    一   six    b
2 10     6    一   six    b

等价于

data2[id==10,]
  • group_by
    按条件分组
data1 %>% group_by(class) #按照class进行分组,在组内可以进行统计操作。

# A tibble: 10 x 5
# Groups:   class [2]
      id class  score  ennum   type
   <int> <dbl> <fctr> <fctr> <fctr>
 1     1     1     十    one      a
 2     2     2     九    two      b
 3     3     1     八  three      a
 4     4     2     七   four      b
 5     5     1     六   five      a
 6     6     2     五    ten      b
 7     7     1     四   nine      a
 8     8     2     三  eight      b
 9     9     1     二  seven      a
10    10     2     一    six      b

ungroup

  • mutate transmute
  • select rename
  • current_vars
    -starts_with end_with
  • contains matches
  • num_range one_of
  • everything
  • sample_n sample_frac
  • summarise summarize
  • 拉取一列变量pull
    pull(data,var=-1)
    data是数据集,var为空时默认拉取最后一列,var为正时从左边开始的列,var为负数从右边开始的列。
  • 根据位置选取观测值slice
    slice(data1,10:n())
    选取十行以后的数据
  1. 两个表操作
  • inner_join
    内联
    匹配两个表相同的内容,返回两个表都有的内容。
  • left_join
    左表匹配右表,返回左表。
  • right_join
    右表匹配左表,返回右表。
  • full_join
    两表匹配,返回两个表的元素。
  • semi_join
    返回能够与y表匹配的x表的所有记录。
  • anti_join
    返回无法与y表匹配的x表的所有记录。
  1. 向量函数
    between
    介于两向量之间
    case_when

coalesce
cumull cumany cumean
desc降序排列
if_else
lead lag
向前和滞后
order_by
排序

n
观测值的数量
n_distinct
不同的观测值的数量
na_if
near
比较两组向量是否相等,等价于"=="
nth first last
向量中第n、第一、最后一个元素
row_number ntitle
min_rank dense_rank
percent_rank cum_dist
recode recode_factor

  1. 元数据
    groups
    分组

groups_vars

  1. 数据集
    dplyr 包中包含乐队成员信息,NASA的空间数据,星际争霸人物特征,和风暴数据:
    band_instruments、band_instruments2 、band_members 、nasa 、starwars、storms

扩展用法

参考

官方参考

相关文章

网友评论

      本文标题:R成精-用dplyr高效变换数据和处理数据

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