dplyr包介紹
dplyr
包是R大神大杰作,Hadley Wickham,被稱為一個改變R的人何暇,dplyr是在plyr上升級的又一力作陶夜。
dplyr包包含了數(shù)據整理谴返、篩選战惊、變換、匯總等多種函數(shù)袭祟《舨澹基本上可以解決數(shù)據處理的80%的問題捂贿。處理數(shù)據跟SQL類似乎,如果你熟悉SQL很快就能夠上手胳嘲。
基礎用法
本文以自己構造的數(shù)據集進行演示厂僧,以便方便理解。
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函數(shù)的unique,該函數(shù)有一個.keep_all的參數(shù)鹰祸,如果等于FALSE甫窟,輸出去重的變量。如果等于TRUE蛙婴,輸出全部變量粗井,有多個相同的觀測數(shù)據,輸出第一條數(shù)據。
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
在所有的列運用函數(shù),并生成新的列耘擂。
-mutate_at
在指定的列運用函數(shù)胆剧,并生成新的列。transmute
添加新列醉冤,刪除其余列select
選擇列-
rename
重命名current_vars
-
starts_with
以XXX開始 -
end_with
以XXX結束 -
contains
包含XXX matches
-
num_range
選取帶數(shù)字的列
例如class1秩霍、class2、class3蚁阳,可以用
num_range(“class”,1:3) one_of
everything
sample_n
抽樣函數(shù)铃绒,sample_n()隨機抽取指定數(shù)目的樣本,sample_frac()隨機抽取指定百分比的樣本韵吨,默認都為不放回抽樣匿垄,通過設置replacement = TRUE可改為放回抽樣,可以用于實現(xiàn)Bootstrap抽樣归粉。sample_frac
summarise
summarize
add_row
:添加行椿疗,在數(shù)據集添加行。pull
拉取一列變量
pull(data,var=-1)
data是數(shù)據集糠悼,var為空時默認拉取最后一列届榄,var為正時從左邊開始的列,var為負數(shù)從右邊開始的列倔喂。根據位置選取觀測值
slice
slice(data1,10:n())
選取十行以后的數(shù)據铝条。rownames_to_column()
:行名轉成列column_to_rownames()
:列轉成行名
2. 兩個表操作
兩表及多表操作是數(shù)據處理中比較常用的操作,跟SQL關聯(lián)類似席噩。
bind_cols()
:合并列
left_join()
:左關聯(lián)班缰,同SQL的left outer join
左表匹配右表,返回左表悼枢。
data1 %>% left_join(data2,by=c("id"="id"))
inner_join()
:內關聯(lián)埠忘,同SQL的inner join
匹配兩個表相同的內容,返回兩個表都有的內容馒索。
full_join()
:全關聯(lián)莹妒,同SQL的full join
兩表匹配,返回兩個表的元素绰上。
right_join()
:與左關聯(lián)類似旨怠,熟練使用左關聯(lián)就行了。
semi_join
:返回能夠與y表匹配的x表的所有記錄蜈块。
anti_join
:返回無法與y表匹配的x表的所有記錄鉴腻。
用by=來制定關聯(lián)的列迷扇。
3. 向量函數(shù)
between
:- 變量>= left & 變量<= right
case_when
:多條件取值相當于sql的case when。
coalesce
cumull
cumany
cumean
desc
:降序排列
if_else
lead lag
order_by
n
:數(shù)量
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. 元數(shù)據
groups
groups_vars
5. 數(shù)據集
dplyr
包中包含樂隊成員信息拘哨,NASA的空間數(shù)據谋梭,星際爭霸人物特征,和風暴數(shù)據:
band_instruments
band_instruments2
倦青、
band_members
、
nasa
盹舞、
starwars
产镐、
storms