dplyr包介绍
dplyr
包是R大神大杰作,Hadley Wickham,被称为一个改变R的人,dplyr是在plyr上升级的又一力作。
dplyr包包含了数据整理、筛选、变换、汇总等多种函数。基本上可以解决数据处理的80%的问题。处理数据跟SQL类似乎,如果你熟悉SQL很快就能够上手。
基础用法
本文以自己构造的数据集进行演示,以便方便理解。
data1 <- data.frame(id=c(1:10),class=c(15:6),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
ungroup
mutate
新建列
-mutate_all
在所有的列运用函数,并生成新的列。
-mutate_at
在指定的列运用函数,并生成新的列。transmute
添加新列,删除其余列select
选择列-
rename
重命名current_vars
-
starts_with
以XXX开始 -
end_with
以XXX结束 -
contains
包含XXX matches
-
num_range
选取带数字的列
例如class1、class2、class3,可以用
num_range(“class”,1:3) one_of
everything
sample_n
抽样函数,sample_n()随机抽取指定数目的样本,sample_frac()随机抽取指定百分比的样本,默认都为不放回抽样,通过设置replacement = TRUE可改为放回抽样,可以用于实现Bootstrap抽样。sample_frac
summarise
summarize
add_row
:添加行,在数据集添加行。pull
拉取一列变量
pull(data,var=-1)
data是数据集,var为空时默认拉取最后一列,var为正时从左边开始的列,var为负数从右边开始的列。根据位置选取观测值
slice
slice(data1,10:n())
选取十行以后的数据。rownames_to_column()
:行名转成列column_to_rownames()
:列转成行名
2. 两个表操作
两表及多表操作是数据处理中比较常用的操作,跟SQL关联类似。
bind_cols()
:合并列
left_join()
:左关联,同SQL的left outer join
左表匹配右表,返回左表。
data1 %>% left_join(data2,by=c("id"="id"))
inner_join()
:内关联,同SQL的inner join
匹配两个表相同的内容,返回两个表都有的内容。
full_join()
:全关联,同SQL的full join
两表匹配,返回两个表的元素。
right_join()
:与左关联类似,熟练使用左关联就行了。
semi_join
:返回能够与y表匹配的x表的所有记录。
anti_join
:返回无法与y表匹配的x表的所有记录。
用by=来制定关联的列。
3. 向量函数
between
:- 变量>= left & 变量<= right
case_when
:多条件取值相当于sql的case when。
coalesce
cumull
cumany
cumean
desc
:降序排列
if_else
lead lag
order_by
n
:数量
n_distinct
na_if
:
near
nth
:第n个
first
:第1个
last
:最后1一个
row_number
:生成排序序号
ntitle
min_rank dense_rank
percent_rank cum_dist
recode recode_factor
4. 元数据
groups
groups_vars
5. 数据集
dplyr
包中包含乐队成员信息,NASA的空间数据,星际争霸人物特征,和风暴数据:
band_instruments
band_instruments2
、
band_members
、
nasa
、
starwars
、
storms