加載 tidyverse 時边篮,仔細(xì)查看輸出的沖突信息揭厚,它會告訴你 dplyr 覆蓋了基礎(chǔ) R 包中的哪些函數(shù)李剖。如果想要在加載 dplyr 后使用這些函數(shù)的基礎(chǔ)版本示绊,那么你應(yīng)該使用它們的完整名稱: stats::filter() 和 stats::lag()锭部。
? int 表示整數(shù)型變量。
? dbl 表示雙精度浮點數(shù)型變量面褐,或稱實數(shù)拌禾。
? chr 表示字符向量,或稱字符串展哭。
? dttm 表示日期時間(日期 + 時間)型變量湃窍。
? lgl 表示邏輯型變量,是一個僅包括 TRUE 和 FALSE 的向量匪傍。
? fctr 表示因子您市, R 用其來表示具有固定數(shù)目的值的分類變量。
? date 表示日期型變量役衡。
dplyr基礎(chǔ)
5 個 dplyr 核心函數(shù):
? 按值篩選觀測(filter())茵休。
? 對行進(jìn)行重新排序(arrange())。
? 按名稱選取變量(select())手蝎。
? 使用現(xiàn)有變量的函數(shù)創(chuàng)建新變量(mutate())榕莺。
? 將多個值總結(jié)為一個摘要統(tǒng)計量(summarize())。
5 個函數(shù)的工作方式都是相同的:
(1) 第一個參數(shù)是一個數(shù)據(jù)框棵介。
(2) 隨后的參數(shù)使用變量名稱(不帶引號)描述了在數(shù)據(jù)框上進(jìn)行的操作钉鸯。
(3) 輸出結(jié)果是一個新數(shù)據(jù)框。
這些函數(shù)都可以和 group_by() 函數(shù)聯(lián)合起來使用邮辽, group_by() 函數(shù)可以改變以上每個函數(shù)的作用范圍唠雕,讓其從在整個數(shù)據(jù)集上操作變?yōu)樵诿總€分組上分別操作贸营。
使用filter()篩選行
filter() 函數(shù)可以基于觀測的值篩選出一個觀測子集。第一個參數(shù)是數(shù)據(jù)框名稱及塘,第二個參數(shù)以及隨后的參數(shù)是用來篩選數(shù)據(jù)框的表達(dá)式莽使。
比較運算符
比較運算符: >、 >=笙僚、 <芳肌、 <=、 !=(不等于)和 ==(等于)肋层。
比較浮點數(shù)是否相等時亿笤,不能使用 ==,而應(yīng)該使用 near():
邏輯運算符
布爾運算符: & 表示“與”栋猖、 | 表示“或”净薛、 ! 表示“非”:
缺失值
確定一個值是否為缺失值,可以使用 is.na() 函數(shù):
filter() 只能篩選出條件為 TRUE 的行蒲拉;它會排除那些條件為 FALSE 和 NA 的行:
使用arrange()排列行
arrange() 函數(shù)的工作方式與 filter() 函數(shù)非常相似肃拜,但前者不是選擇行,而是改變行的順序雌团。它接受一個數(shù)據(jù)框和一組作為排序依據(jù)的列名(或者更復(fù)雜的表達(dá)式)作為參數(shù)燃领。如果列名不只一個,那么就使用后面的列在前面排序的基礎(chǔ)上繼續(xù)排序锦援,注:默認(rèn)缺失值排在最后猛蔽。
使用 desc() 可以按列進(jìn)行降序排序:
使用select()選擇列
select()可以用于選擇自己需要的列作為子集,然后用于分析:
select () 函數(shù)的一些輔助函數(shù):
? starts_with("abc"):匹配以“abc”開頭的名稱灵寺。
? ends_with("xyz"):匹配以“xyz”結(jié)尾的名稱曼库。
? contains("ijk"):匹配包含“ijk”的名稱。
? matches("(.)\1"):選擇匹配正則表達(dá)式的那些變量略板。這個正則表達(dá)式會匹配名稱中有
重復(fù)字符的變量毁枯。你將在第 10 章中學(xué)習(xí)到更多關(guān)于正則表達(dá)式的知識。
? num_range("x", 1:3):匹配 x1叮称、 x2 和 x3后众。
select() 可以重命名變量,但我們很少這樣使用它颅拦,因為這樣會丟掉所有未明確提及的變量蒂誉。我們應(yīng)該使用 select() 函數(shù)的變體 rename() 函數(shù)來重命名變量,以保留所有未明確提及的變量:
select() 函數(shù)和 everything() 輔助函數(shù)結(jié)合起來使用距帅∮蚁牵可以將幾個變量移到數(shù)據(jù)框開頭時,這種用法非常奏效:
使用mutate()添加新變量
mutate()函數(shù)可用于添加新的列碌秸。
.after = X 添加在X列的后面 .before = Y 添加在Y列的前面
如果只想保留新變量绍移,可以使用 transmute() 函數(shù):
常用創(chuàng)建函數(shù)
算術(shù)運算符: +悄窃、 -、 *蹂窖、 /轧抗、 ^
模運算符: %/% 和 %%
對數(shù)函數(shù): log()碘耳、 log2() 和 log10()
偏移函數(shù):lead() 和 lag() 函數(shù)可以返回一個序列的領(lǐng)先值和滯后值扔茅。
累加和滾動聚合:R 提供了計算累加和物喷、累加積剃盾、累加最小值和累加最大值的函數(shù): cumsum()、 cumprod()郑临、commin() 和 cummax()颜骤; dplyr 還提供了 cummean() 函數(shù)以計算累加均值聂渊。如果想要計算滾動聚合(即滾動窗口求和)孝宗,那么可以嘗試使用 RcppRoll 包:
邏輯比較: <穷躁、 <=、 >因妇、 >= 和 !=
使用summarize()進(jìn)行分組摘要
查看數(shù)據(jù)摘要问潭。
使用管道組合多種操作
管道命令: %>%,使用這種方法時婚被, x %>% f(y) 會轉(zhuǎn)換為 f(x, y)睦授, x %>% f(y) %>% g(z) 會轉(zhuǎn)換為 g(f(x,y), z),以此類推摔寨。
等價于
缺失值
na.rm = TRUE表示移除缺失值。
計數(shù)
n()函數(shù)表示計數(shù)怖辆。
常用的摘要函數(shù)
位置度量:median(x)中位值
分散程度度量: sd(x)是复、 IQR(x) 和 mad(x)。均方誤差(又稱標(biāo)準(zhǔn)誤差竖螃, standard deviation淑廊, sd)是分散程度的標(biāo)準(zhǔn)度量方式。四分位距 IQR() 和絕對中位差 mad(x) 基本等價特咆。
秩的度量: min(x)季惩、 quantile(x, 0.25) 和 max(x)。quantile(x, 0.25) 會找出 x 中按從小到大順序大于前25% 而小于后 75% 的值腻格。
定位度量: first(x)画拾、 nth(x, 2) 和 last(x)。這幾個函數(shù)的作用與 x[1]菜职、 x[2] 和 x[length(x)] 相同青抛,只是當(dāng)定位不存在時(比如嘗試從只有兩個元素的分組中得到第三個元素),前者允許你設(shè)置一個默認(rèn)值酬核。
計數(shù):n(),sum(!is.na(x))可以計算出非缺失值的數(shù)量蜜另,n_distinct(x)可以計算出唯一值的數(shù)量适室。
邏輯值的計數(shù)和比例: sum(x > 10) 和 mean(y == 0)。當(dāng)與數(shù)值型函數(shù)一同使用時举瑰, TRUE 會轉(zhuǎn)換為 1捣辆, FALSE 會轉(zhuǎn)換為 0。
按多個變量分組
當(dāng)使用多個變量進(jìn)行分組時此迅,每次的摘要統(tǒng)計會用掉一個分組變量汽畴。
取消分組
如果想要取消分組,并回到未分組的數(shù)據(jù)繼續(xù)操作邮屁,那么可以使用 ungroup() 函數(shù):
分組新變量(和篩選器)
分組篩選器的作用相當(dāng)于分組新變量加上未分組篩選器整袁。
附:dplry深度學(xué)習(xí)
篩選:filter
filter()函數(shù)k可以按照給定的邏輯條件篩選出符合要求的子數(shù)據(jù)集,返回與輸入數(shù)據(jù)相同的數(shù)據(jù)類型佑吝,支持對同一對象的任意條件組合坐昙。
語法:
filter(data,條件)
排序:arrange
arrange()函數(shù)按照給定的列對數(shù)據(jù)進(jìn)行排序,默認(rèn)是按照升序排序芋忿,也可以使用desc()實現(xiàn)降序排序炸客。可以對多個列進(jìn)行排序戈钢,用逗號分隔痹仙。
語法:
arrange(data,col_name)
選擇:select
select()按照列名選擇子數(shù)據(jù)集,可以結(jié)合特定函數(shù)使用:
ends_with():選擇以指定字符結(jié)尾的列
starts_with():選擇以指定字符開頭的列
contains():選擇包含指定字符的列
one_of():選擇列名為指定字符的列
num_range():選擇組合字符指定的列
everything():選擇所有的列殉了,一般不用于選擇开仰,而是用于修改列的順序
語法:
select(data,col_names)
重命名:rename
rename()函數(shù)的使用方法和select一樣,唯一不同的是rename()函數(shù)可以對列進(jìn)行重命名后返回的是全部列薪铜,而不是只返回重命名的列众弓。
語法:
rename(data,new_name=old_name)
變形:mutate
mutate()函數(shù)可以對已有的列進(jìn)行數(shù)據(jù)運算并添加為新的列,mutate的結(jié)果會保留原有變量隔箍。
語法:
mutate(data,…)
去重:distinct
distinct()用于對輸入的數(shù)據(jù)進(jìn)行去重谓娃,返回?zé)o重復(fù)的行。
語法:
distinct(.data, ..., .keep_all = FALSE)
概要:summarise
sunmmarise()可以對數(shù)據(jù)框進(jìn)行匯總操作蜒滩,返回一維結(jié)果滨达。
語法:
summarise(.data, ...)
summarise主要支持以下幾種公式 :
mean()、 median()
sd()俯艰、 IQR()捡遍、 mad()
min()、 max()竹握、 quantile()
first()稽莉、 last()、 nth()
n()、 n_distinct()
any()污秆、 all()
抽樣:sample
用于對數(shù)據(jù)進(jìn)行抽樣的函數(shù)劈猪,sample_n()抽取指定數(shù)量的樣本,sample_frac()抽取指定百分比的樣本良拼,默認(rèn)為不放回抽樣战得,可以通過設(shè)置replacement=TRUE改為放回抽樣。
語法:
sample_n(tbl, size, replace = FALSE, weight = NULL, .env = parent.frame())
sample_frac(tbl, size = 1, replace = FALSE, weight = NULL,.env = parent.frame())
分組:group_by
group_by()用于對數(shù)據(jù)集按照給定變量分組庸推,返回分組后的數(shù)據(jù)集常侦,使用以上的函數(shù)對分組數(shù)據(jù)進(jìn)行操作時,會自動對分組數(shù)據(jù)進(jìn)行操作贬媒。
語法:
group_by(data, ..., add = FALSE)
條件語句:ifelse
語法:
if_else(condition,true, false, missing = NULL)