數(shù)據(jù)準(zhǔn)備
> library(hflights)
> library(dplyr)
> data("hflights",package = "hflights")
> hflights_df<-tbl_df(hflights)
$filter篩選
按給定的邏輯判斷篩選出符合要求的子數(shù)據(jù)集
除了代碼簡(jiǎn)潔外, 還支持對(duì)同一對(duì)象的任意個(gè)條件組合, 如:
> filter(hflights_df,Month == 1,DayofMonth ==1)
> filter(hflights_df, Month == 1 | Month == 2)
> filter(tbl_hflights,Year == 2011, Month == 1, DepTime == 1400)
> filter(tbl_hflights,Year == 2011 & Month == 1 & DepTime == 1400)
> filter(tbl_hflights,Year == 2011 & Month == 1 & DepTime <= 1400)
> filter(tbl_hflights,Year == 2011 & Month == 1 & (DepTime == 1400 |? DepTime == 1430) & UniqueCarrier == 'AA')
$select選擇列
> b<-select(hflights_df,Year,Month,DayofMonth,FlightNum,Distance)
> c<-select(hflights_df,Year:ArrTime)
> w<-select(hflights_df,ArrTime:Year)
> v<-select(hflights_df,-Year,-Month,-DayofMonth,-FlightNum,-Distance)
> e<-select(hflights_df,-(Year:ArrTime))
$%>%管道函數(shù)
是最常用的一個(gè)操作符饵婆,就是把左側(cè)準(zhǔn)備的數(shù)據(jù)或表達(dá)式,傳遞給右側(cè)的函數(shù)調(diào)用或 表達(dá)式進(jìn)行運(yùn)行,可以連續(xù)操作就像一個(gè)鏈條一樣疗琉。
# 設(shè)置隨機(jī)種子
> set.seed(1)
# 開始?
> n1<-rnorm(10000) ? ? ? ? ? ? # 第1步
> n2<-abs(n1)*50 ? ? ? ? ? ? ? ? ?# 第2步
> n3<-matrix(n2,ncol = 100)? # 第3步
> n4<-round(rowMeans(n3))? ? # 第4步
> hist(n4%%7) ? ? ? ? ? ? ? ? ? ? ? ? ? # 第5步# 設(shè)置隨機(jī)種子
> set.seed(1)
# 開始
> rnorm(10000) %>%
? ? +? abs %>% `*` (50) ?%>%
+? matrix(ncol=100)? %>%
+? rowMeans %>% round %>%?
+? `%%`(7) %>% hist
$arrange數(shù)據(jù)排序
arrange可以根據(jù)變量名依次對(duì)數(shù)據(jù)框進(jìn)行排序淤齐,靠前的變量?jī)?yōu)先級(jí)越高啦鸣,對(duì)變量名使用desc函數(shù)即為倒序。plyr(我們以后會(huì)介紹的一個(gè)包蝉衣,同樣出品自Hadley Wickham)中也有一個(gè)相同的此函數(shù)括尸。
hflights1<-select(filter(hflights_df,Year == 2011 & Month == 1 & DepTime == 1400),Year:ArrTime,AirTime)
arrange(hflights_df1,ArrTime)
arrange(hflights_df1,desc(AirTime),ArrTime)
$mutate變形
對(duì)已有列進(jìn)行數(shù)據(jù)運(yùn)算并添加為新列,值得稱贊的是病毡,一段mutate的代碼中濒翻,靠后的變量操作可以操作前期新添加或改變的變量
c<-mutate(hflights_df,? gain = ArrDelay - DepDelay,? speed = Distance / AirTime * 60)
$summarise匯總
summarise是對(duì)數(shù)據(jù)框中的變量調(diào)用函數(shù)進(jìn)行數(shù)據(jù)匯總,分組計(jì)算,使用分組計(jì)算的summarise能做的事情就多了非常多肴焊,其可以實(shí)現(xiàn)幾乎所有的類似于Excel中數(shù)據(jù)透視表的匯總功能前联。
summarise(hflights_df,? delay = mean(DepDelay, na.rm = TRUE))
> iris[1:4]%>%summarise_each(funs(mean,sum))??
Sepal.Length_mean Sepal.Width_mean Petal.Length_mean Petal.Width_mean Sepal.Length_sum1? ? ? ? ? 5.843333? ? ? ? 3.057333? ? ? ? ? ? 3.758? ? ? ? 1.199333? ? ? ? ? ? 876.5? Sepal.Width_sum Petal.Length_sum Petal.Width_sum1? ? ? ? ? 458.6? ? ? ? ? ? 563.7? ? ? ? ? 179.9
$ group_by()分組動(dòng)作
此group_by的語(yǔ)法意義幾乎與SQL中的group by完全一樣,其也是針對(duì)被group by的變量進(jìn)行分組的操作與計(jì)算娶眷,前提是有這樣的操作與計(jì)算似嗤。summarise配合使用分組計(jì)算能做到很大部分的數(shù)據(jù)透視表可以做的事情:
> w<-group_by(iris,Species)%>%
+? ? summarise(mean=mean(Sepal.Length),max=max(Sepal.Width),
+? ? ? ? ? ? ? min=min(Sepal.Width),sd=sd(Petal.Width))%>%
+? ? ungroup%>%
+? ? mutate(distTest = max-min)
$join合并
假設(shè)其形式均為join(x漓滔,y)
inner_join 返回所有在y中能查找到的x的行懂扼,且包含x和y的所有列;
left_join 返回所有x的行膜赃,且包含x和y的所有列豌注,在y中沒有查找到的x的行新增的列的值會(huì)以NA填充伤塌;
right_join 同上,只是x和y調(diào)換了一下轧铁;
full_join 返回所有x和y的行和列每聪,未查找的部分同樣會(huì)被NA填充;
anti_join 返回所有未能在y中能查找到的x的行齿风,也只返回x的列
semi_join 返回所有在y中能查找到的x的行药薯,也只返回x的列
$row wise $col wise 分別為按行和按列分組
其實(shí)就是apply(x,1,FUN)與,apply(x,2,FUN)但是比apply的效率高(不一定救斑,親自測(cè)一下比較好)
> m=matrix(1:16000000,ncol=2)%>%data.frame
> system.time(m%>%rowwise%>%summarise(sum(X1,X2))) 用戶? 系統(tǒng)? 流逝 10.52? 0.00 10.52
?> system.time(m%>%apply(1,sum)) 用戶? 系統(tǒng)? 流逝 55.87? 0.10 55.97
$bind_cols( ) $bind_rows( )數(shù)據(jù)合并
mydf1 <- data.frame(x = c(1,2,3,4), y = c(10,20,30,40))
mydf2 <- data.frame(x = c(5,6), y = c(50,60))
mydf3 <- data.frame(z = c(100,200,300,400))
bind_rows(mydf1, mydf2)
bind_cols(mydf1, mydf3)
需要說(shuō)明的是童本,bind_rows()函數(shù)需要兩個(gè)數(shù)據(jù)框或tbl對(duì)象有相同的列數(shù),而bind_cols()函數(shù)則需要兩個(gè)數(shù)據(jù)框或tbl對(duì)象有相同的行數(shù)脸候。