-
%>%
管道符傳遞變量郁轻,簡(jiǎn)潔代碼卵凑。
- 用法:
df %>% select(mpg,wt)->df1
,運(yùn)行一下叉趣,看看是不是選擇了 df 中的暮胧,mpg锐借,wt 兩列呢,并且我們將結(jié)果賦值給了變量 df1 - 作用 1:將 df,傳遞到 select 函數(shù)中的第一個(gè)位置问麸,事實(shí)上,我們還可以通過(guò)"."作為占位符钞翔,來(lái)將 df 放到任意位置严卖。
比如df%>%select(mpg,wt,.)
,注意看,wt 后面有一個(gè)點(diǎn)布轿,當(dāng)然這條語(yǔ)句是不能正常運(yùn)行的哮笆,我只是想告訴大家,通過(guò)“點(diǎn)”作為占位符汰扭,可以將上一個(gè)結(jié)果稠肘,放到下一個(gè)管道中的任意位置。 - 作用 2:有沒(méi)有發(fā)現(xiàn)用了管道符之后萝毛,我們?cè)俅问褂昧忻?mpg 的時(shí)候项阴,便不需要使用 df$mpg 了呢,沒(méi)錯(cuò)笆包,它的另外一個(gè)功能就是類似于 attach环揽,數(shù)據(jù)綁定的功能,使用管道符色查,能讓我們的代碼更加簡(jiǎn)潔薯演。
- 用法:
-
select()
篩選列
用列名進(jìn)行篩選。
- 巧用以下符號(hào)
":"
該符號(hào)表示用于選擇一系列的變量秧了。"!"
:表示取反操作的跨扮,類似于在 df 中不選擇某列,比如 df[,-1],表示不選擇第一列"&"
:表示邏輯運(yùn)算符“與”验毡,表示“且”的意思衡创。A&B,表示滿足條件 A晶通,且滿足條件 B"|"
:表示邏輯運(yùn)算符“或”璃氢,表示“或”的意思。A|B狮辽,表示滿足條件 A 或者滿足條件 B 就可以了一也,通常具有短路操作。"c()"
:就是表示列的組合喉脖,其實(shí)就是向量椰苟,元素可為數(shù)字或者字符串。"-"
:去除- 下面還有幾個(gè)比較重要的函數(shù)树叽,可以作為 select 選擇列的參數(shù)來(lái)使用舆蝴。
last_col()
: 表示選擇最后一列。starts_with()
:表示以什么開(kāi)頭的列。ends_with()
:表示以什么結(jié)尾的列洁仗。contains()
:表示某列是否包含什么內(nèi)容层皱。one_of()
:選擇字符向量中的列,select中不能直接使用字符向量篩選赠潦,需要使用one_of函數(shù).everything
:一般用于調(diào)整列順序叫胖,把a(bǔ)列放到最前面
select(iris, a, everything())
- 例子:
- 選擇 df 中的第一列到第五列。
用法:select(df,1:5)或者select(df,c(1,2,3,4,5))
- 選擇 df 中的 mpg 到 wt 之間的所有列她奥,包括(mpg,wt)
用法:select(df,"mpg":"wt")
- 選擇某些列以"d"開(kāi)頭臭家,或者以"p"結(jié)尾的。
用法:select(df,starts_with("d")|ends_with("p"))
- 選擇某些列以"d"開(kāi)頭方淤,且以"t"結(jié)尾的。
用法:select(df,starts_with("d")&ends_with("t"))
- 選擇以"d"開(kāi)頭蹄殃,且包含"s"的列携茂。
用法:select(df,starts_with("d")&contains("s"))
- 選擇不以"d"開(kāi)頭,且以"p"結(jié)尾的列.
用法:select(df,!(starts_with("d"))&(ends_with("p")))
- 選擇向量里的字符串變量名 :
vars <- c("A", "B") select(iris, one_of(vars))
- 返回指定字符向量之外的列 "-" :
select(iris, - one_of(vars))
- 選擇 df 中的第一列到第五列。
-
rename()
重命名 給定列
保留所有的列诅岩,只對(duì)給定的列重新命名讳苦。原數(shù)據(jù)集行名稱會(huì)被過(guò)濾掉。
rename(data,new_name= old_name)
#重命名列Petal.Length吩谦,返回子數(shù)據(jù)集只包含重命名的列
select(iris, petal_length = Petal.Length)
#重命名所有以Petal為前綴的列鸳谜,返回子數(shù)據(jù)集只包含重命名的列
select(iris, petal = starts_with("Petal"))
#重命名列Petal.Length,返回全部列
rename(iris, petal_length = Petal.Length)
-
filter()
/slice()
篩選行 -
slice()
函數(shù)通過(guò)行號(hào)選取數(shù)據(jù)式廷。 -
filter()
通過(guò)邏輯運(yùn)算篩選咐扭。==, >, >= etc
&, |, !, xor()
is.na()
-
between(), near()
- between(x,a,b):假設(shè) x 是一個(gè)數(shù)值型向量,該函數(shù)判斷 x 中元素是否(>=a)&(<=b)滑废,返回一個(gè)邏輯型向量蝗肪。
- 例子:
- 選擇 df 中,hp 列大于等于 110蠕趁,小于等于 150 的行,且 gear 列等于 4薛闪。filter(df,between(df$hp,110,150)&(df["gear"]==4))
- 選擇 df 中,hp 列大于 disp 列的行俺陋。
filter(df,df["hp"]>df["disp"])
#選取第一行數(shù)據(jù)
slice(mtcars, 1L)
filter(mtcars, row_number() == 1L)
#選取最后一行數(shù)據(jù)
slice(mtcars, n())
filter(mtcars, row_number() == n())
#選取第5行到最后一行所有數(shù)據(jù)
slice(mtcars, 5:n())
filter(mtcars, between(row_number(), 5, n()))
-
默認(rèn)是升序豁延,如需降序,則使用 desc()函數(shù)腊状。arrange()排序
- 使 df 按照 mpg 列升序排列诱咏,wt 列,升序排列寿酌。
arrange(df,"mpg","wt")
- 使 df 按照 mpg 列升序排列胰苏,wt 列,降序排列。
arrange(df,"mpg",desc("wt"))
- 使 df 按照 mpg 列升序排列诱咏,wt 列,升序排列寿酌。
-
mutate () 列計(jì)算/變形
mutate():產(chǎn)生新的列硕并,保留舊的列法焰。
新變量名 ,計(jì)算并賦值給變量名
transmute()只返回?cái)U(kuò)展的新變量倔毙。原數(shù)據(jù)集行名稱會(huì)被過(guò)濾掉埃仪。
df%>%
select(cyl,gear,wt)%>%
mutate(cyl2=cyl*2,gear4=gear*4,
wt=NULL #將值設(shè)置為NULL,可將這列刪除
)%>%
head()
##cyl 和 gear 還在
## 新增列的位置:.before | .after
#假如想指定這些新增加的列放在哪個(gè)列之前或者之后陕赃,使用 .before=原來(lái)df中的某個(gè)列名卵蛉,可以將新增加列,放在原來(lái)的那個(gè)列名前面么库,注意before參數(shù)前面有個(gè)點(diǎn)I邓俊!诉儒,.after表示放在某個(gè)列之后葡缰。
-
summarise()
對(duì)數(shù)據(jù)框或者分組變量進(jìn)行統(tǒng)計(jì)性描述。
常用結(jié)合函數(shù)
- Center: mean()忱反,median()
- Spread:sd(), IQR() , mad()
- Range:min() ,max(), quantile()
- Position: first(), last(), nth()
- Count: n() ,n_distinct()
- Logical :any() ,all()
-
quantile()
:- 默認(rèn)返回四分位(0泛释,0.25(Q1),0.5(Q2)温算,0.75(Q3)怜校,1)- quantile(1:10,c(0.25,0.75))#第二個(gè)參數(shù)控制 分位值
-
IQR ()
: 四分位間距- IQR(1:10 ) >IQR =Q3-Q1 =7.75-3.25=4.5
median()
:中位數(shù) Q2-
nth( )
: 表示抽取向量中哪一個(gè)位置的元素- 比如 nth(c(1,5,2),2)抽取的是第二個(gè)位置的注竿,返回 5茄茁,還可以通過(guò)負(fù)號(hào),來(lái)表示抽取倒數(shù)第幾個(gè)蔓搞,比如 nth(c(1,5,2),-3)胰丁,表示抽取倒數(shù)第三個(gè),就是 1
n( )
:
- 返回當(dāng)前分組或者變量的信息喂分,通常是計(jì)數(shù)锦庸,通常用在特定函數(shù),比如 summarize,mutate 中蒲祈。n_distinct()
: 去重后甘萧,再計(jì)數(shù)。first()
,last()
:
- 參數(shù)可以為一個(gè)向量梆掸,分別返回向量的第一個(gè)值扬卷,和最后一個(gè)值。mad()
: 中位數(shù)絕對(duì)偏差
-
group_by()
對(duì)數(shù)據(jù)框按照一列或者多列進(jìn)行分組
group_by()用于對(duì)數(shù)據(jù)集按照給定變量分組酸钦,返回分組后的數(shù)據(jù)集怪得。對(duì)返回后的數(shù)據(jù)集使用以上介紹的函數(shù)時(shí),會(huì)自動(dòng)的對(duì)分組數(shù)據(jù)操作。
group_by() 后徒恋,數(shù)據(jù)外觀不變蚕断。(與 summarize()聯(lián)用,分組統(tǒng)計(jì)描述入挣。)
#使用變量cyl對(duì)mtcars分組亿乳,返回分組后數(shù)據(jù)集
by_cyl <- group_by(mtcars, cyl)
#返回每個(gè)分組中最大disp所在的行
filter(by_cyl, disp == max(disp))
#返回每個(gè)分組中變量名包含d的列,始終返回分組列cyl
select(by_cyl, contains("d"))
#使用mpg對(duì)每個(gè)分組排序
arrange(by_cyl, mpg)
#對(duì)每個(gè)分組無(wú)重復(fù)的取2行記錄
sample_n(by_cyl, 2)
#使用變量cyl對(duì)mtcars分組径筏,然后對(duì)分組后數(shù)據(jù)集使用聚合函數(shù)
by_cyl <- group_by(mtcars, cyl)
#返回每個(gè)分組的記錄數(shù)
summarise(by_cyl, n())
#求每個(gè)分組中disp和hp的均值
summarise(by_cyl, mean(disp), mean(hp))
#返回每個(gè)分組中唯一的gear的值
summarise(by_cyl, n_distinct(gear))
#返回每個(gè)分組第一個(gè)和最后一個(gè)disp值
summarise(by_cyl, first(disp))
summarise(by_cyl, last(disp))
#返回每個(gè)分組中最小的disp值
summarise(by_cyl, min(disp))
summarise(arrange(by_cyl, disp), min(disp))
#返回每個(gè)分組中最大的disp值
summarise(by_cyl, max(disp))
summarise(arrange(by_cyl, disp), max(disp))
#返回每個(gè)分組中disp第二個(gè)值
summarise(by_cyl, nth(disp,2))
#使用cyl對(duì)數(shù)據(jù)框分組
grouped <- group_by(mtcars, cyl)
#獲取分組數(shù)據(jù)集所使用的分組變量
groups(grouped)
#ungroup從數(shù)據(jù)框中移除組合信息葛假,因此返回的分組變量為NULL
groups(ungroup(grouped))
##計(jì)數(shù):
group_size用于返回每個(gè)分組的記錄數(shù),n_groups返回分成的組數(shù)滋恬。
對(duì)數(shù)據(jù)集的每個(gè)分組計(jì)數(shù)聊训,類似于base:: table()函數(shù)。其中count已經(jīng)過(guò)group_by分組恢氯,而tally需要對(duì)數(shù)據(jù)集調(diào)用group_by后對(duì)分組數(shù)據(jù)計(jì)數(shù)魔眨。
tally(x, wt, sort = FALSE)
count(x, ..., wt =NULL, sort = FALSE)
#使用count對(duì)分組計(jì)數(shù),數(shù)據(jù)已按變量分組
count(mtcars, cyl)
#設(shè)置sort=TRUE酿雪,對(duì)分組計(jì)數(shù)按降序排序
count(mtcars, cyl, sort = TRUE)
#使用tally對(duì)分組計(jì)數(shù),需要使用group_by分組
tally(group_by(mtcars, cyl))
#使用summarise對(duì)分組計(jì)數(shù)
summarise(group_by(mtcars, cyl), n())
版權(quán)聲明:本文為CSDN博主「Kingsley_W」的原創(chuàng)文章侄刽,遵循CC 4.0 BY-SA版權(quán)協(xié)議指黎,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wltom1985/article/details/54973811
-
sample_n ()
:從給定的數(shù)據(jù)框中州丹,采樣 n 個(gè)數(shù)據(jù)醋安。
sample_n(數(shù)據(jù),采樣個(gè)數(shù),replace=FALSE | TRUE)- replace 表示是否放回抽樣,默認(rèn)為 FALSE墓毒,不放回抽樣吓揪,如果需要放回抽樣,則需要設(shè)置為 replace=TRUE
-
sample_frac ()
:從給定的數(shù)據(jù)框中所计,采樣多少比例的數(shù)據(jù)柠辞。
sample_frac(df,0.5,replace=FALSE) 從 df 中,采樣 50%的數(shù)據(jù)主胧。 -
case_when ( )
:針對(duì)向量元素叭首,對(duì)符合條件的,做操作踪栋。
1.當(dāng)向量中的元素不符合條件時(shí)候焙格,會(huì)被當(dāng)做 NA,你操作的向量元素個(gè)數(shù)夷都,和 case_when 輸出的向量元素個(gè)數(shù)相等眷唉。
2.每個(gè)條件的執(zhí)行是有順序的,順序從上往下執(zhí)行!
3.輸出的向量的類型必須是統(tǒng)一的冬阳,要么為數(shù)值型向量蛤虐,要么為字符型向量,是什么類型取決于最上面執(zhí)行的條件判斷摩泪。
4.當(dāng)進(jìn)行兩個(gè)向量間的條件判斷的時(shí)候笆焰,兩個(gè)向量的元素個(gè)數(shù)必須相等
格式為:case_when(條件 1~針對(duì)條件 1 進(jìn)行的操作,TRUE~某操作)
其中,符號(hào)"~"可理解為賦值操作见坑。TRUE 可理解為 else,注意 else 的范圍是最大的嚷掠,如果放在第一行,并且進(jìn)行的是賦值操作荞驴,那么就會(huì)返回你賦的值不皆,如果是針對(duì)向量元素的操作,那么返回的還是一個(gè)向量熊楼。見(jiàn)下圖霹娄。-
if_else ( )
:對(duì)向量進(jìn)行條件篩選,然后操作鲫骗。- if_else(條件犬耻,滿足條件的元素的操作,不滿足條件的元素的操作)
-
-
集合操作:
-
union()
:并集去重 -
union_all( )
: 并集不去重 -
intersect
: 交集 -
setdiff()
:差集 - setdiff(a,b)a 中哪些在 b 中沒(méi)有
-
setequal()
: 判斷是否相等
-
-
distinct()
:數(shù)據(jù)框去重执泰。
默認(rèn)使用所有變量去重枕磁,除非指定變量。
‘ .keep_all ’ :去重后是否保留所有變量术吝。(FALSE计济,則只保留指定用于去重的變量) -
數(shù)據(jù)框連接:
inner_join, left_join, right_join, full_join,anti_join,semi_join
等
reference:
R 語(yǔ)言中 dplyr 包 join 函數(shù)之目前我看到過(guò)的最形象的教程 - 簡(jiǎn)書 (jianshu.com)
-
內(nèi)連接 inner_join 函數(shù)
- 內(nèi)連接的結(jié)果是一個(gè)新數(shù)據(jù)框,其中包含鍵排苍、 x 值和 y 值沦寂。我們使用 by 參數(shù)告訴 dplyr 哪個(gè)變量是鍵:
-
外連接
- 內(nèi)連接保留同時(shí)存在于兩個(gè)表中的觀測(cè), 外連接則保留至少存在于一個(gè)表中的觀測(cè)淘衙。外連接有 3 種類型传藏。
? 左連接:保留 x 中的所有觀測(cè)。
? 右連接:保留 y 中的所有觀測(cè)
? 全連接:保留 x 和 y 中的所有觀測(cè)彤守。
-
篩選連接
-
semi_join(x, y)
: 保留 x 表中與 y 表中的觀測(cè)相匹配的所有觀測(cè)漩氨。 -
anti_join(x, y)
: 丟棄 x 表中與 y 表中的觀測(cè)相匹配的所有觀測(cè)。
-
-
數(shù)據(jù)框合并:
合并的對(duì)象為數(shù)據(jù)框遗增,也可以是能夠轉(zhuǎn)換為數(shù)據(jù)框的列表叫惊。
- 按行合并函數(shù)
bind_rows()
通過(guò)列名進(jìn)行匹配,不匹配的值使用NA替代做修,類似于base:: rbind()函數(shù)霍狰。 - 按列合并函數(shù)
bind_cols()
通過(guò)行號(hào)匹配抡草,因此合并的數(shù)據(jù)框必須有相同的行數(shù),函數(shù)類似于base:: cbind()函數(shù)蔗坯。原數(shù)據(jù)集行名稱會(huì)被過(guò)濾掉康震。語(yǔ)法如下:
#按行合并,.id添加新列用于指明合并后每條數(shù)據(jù)來(lái)自的源數(shù)據(jù)框
bind_rows(...,.id = NULL)
#按列合并
bind_cols(...)
#合并數(shù)據(jù)集
combine(...)
Reference :
https://blog.csdn.net/wltom1985/article/details/54973811
https://zhuanlan.zhihu.com/p/358167377