初始化0.1 安裝
install.packages("dplyr")
0.2 示范數(shù)據(jù)
- library(Lahman): Lahman 包里的棒球比賽數(shù)據(jù)集 Batting
- library(hflights): hflights 包里的飛機航班數(shù)據(jù)
0.3 數(shù)據(jù)集類型
將過長過大的數(shù)據(jù)集轉換為顯示更友好的 tbl_df 類型:
hflights_df <- tbl_df(hflights)
可以 hflights_df 感受一下不再被刷屏的感覺.
1 基本操作
把常用的數(shù)據(jù)操作行為歸納為以下五種:
1.1 篩選: filter()
按給定的邏輯判斷篩選出符合要求的子數(shù)據(jù)集, 類似于 base::subset() 函數(shù)
例如:
filter(hflights_df, Month == 1, DayofMonth == 1)
用R自帶函數(shù)實現(xiàn):
hflights[hflightsMonth?==?1?&?hflightsMonth?==?1?&?hflightsDayofMonth == 1, ]
除了代碼簡潔外, 還支持對同一對象的任意個條件組合, 如:
filter(hflights_df, Month == 1 | Month == 2)
注意: 表示 AND 時要使用 & 而避免 &&
1.2 排列: arrange()
按給定的列名依次對行進行排序.
例如:
arrange(hflights_df, DayofMonth, Month, Year)
對列名加 desc() 進行倒序:
arrange(hflights_df, desc(ArrDelay))
這個函數(shù)和 plyr::arrange() 是一樣的, 類似于 order()
用R自帶函數(shù)實現(xiàn):
hflights[order(hflightsDayofMonth,hflightsMonth, hflightsYear),]hflights[order(desc(hflightsArrDelay)), ]
1.3 選擇: select()
用列名作參數(shù)來選擇子數(shù)據(jù)集:
select(hflights_df, Year, Month, DayOfWeek)
還可以用 : 來連接列名, 沒錯, 就是把列名當作數(shù)字一樣使用:
select(hflights_df, Year:DayOfWeek)
用 - 來排除列名:
select(hflights_df, -(Year:DayOfWeek))
同樣類似于R自帶的 subset() 函數(shù) (但不用再寫一長串的 c("colname1", "colname2") 或者 which(colname(data) == "colname3"), 甚至還要去查找列號)
1.4 變形: mutate()
對已有列進行數(shù)據(jù)運算并添加為新列:
mutate(hflights_df,? ?gain = ArrDelay - DepDelay,? ?speed = Distance / AirTime * 60)
作用與 plyr::mutate() 相同, 與 base::transform() 相似, 優(yōu)勢在于可以在同一語句中對剛增加的列進行操作:
mutate(hflights_df,? ?gain = ArrDelay - DepDelay,? ?gain_per_hour = gain / (AirTime / 60))
而同樣操作用R自帶函數(shù) transform() 的話就會報錯:
transform(hflights,? ?gain = ArrDelay - DepDelay,? ?gain_per_hour = gain / (AirTime / 60))1.5 匯總: summarise()
對數(shù)據(jù)框調(diào)用其它函數(shù)進行匯總操作, 返回一維的結果:
summarise(hflights_df,? ?delay = mean(DepDelay, na.rm = TRUE))
等同于 plyr::summarise(), 原文說該函數(shù)功能尚不是非常有用, 大概以后的更新會加強吧。








暫無數(shù)據(jù)