【數據處理】dplyr包(下)
主要內容
繼續上一講的內容,我們繼續介紹dplyr包的其他功能,現在真正便捷的功能來了。
5.數據變形
在dplyr包里,我們可以用mutate()函數直接利用已有的數據生成新的變數,這在使用相關分類和聚類演算法的時候尤其好用。
mutate(flights,gain = arr_delay - dep_delay, speed = distance/air_time * 60)Source: local data frame [336,776 x 21] year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay (int) (int) (int) (int) (int) (dbl) (int) (int) (dbl)1 2013 1 1 517 515 2 830 819 112 2013 1 1 533 529 4 850 830 203 2013 1 1 542 540 2 923 850 334 2013 1 1 544 545 -1 1004 1022 -185 2013 1 1 554 600 -6 812 837 -256 2013 1 1 554 558 -4 740 728 127 2013 1 1 555 600 -5 913 854 198 2013 1 1 557 600 -3 709 723 -149 2013 1 1 557 600 -3 838 846 -810 2013 1 1 558 600 -2 753 745 8.. ... ... ... ... ... ... ... ... ...Variables not shown: carrier (chr), flight (int), tailnum (chr), origin (chr), dest (chr), air_time (dbl), distance (dbl), hour (dbl), minute (dbl), time_hour (time), gain (dbl), speed (dbl)
上面那條代碼就是生成了兩個新的行列(變數)gain與speed,其中gain等於離開時間的延誤時間減去到達時間的延誤時間,speed等於距離除以時間再乘以60。從輸出結果我們可以看出這兩列已經被加到了data.frame的最後(觀察最下面的Variables not shown)。
當然我們還可以用transform()函數直接修改以生成的行列(變數)。
transform(flights, gain = arr_delay - delay, gain_per_hour = gain / (air_time / 60))
如果你只想保留新生成的行列(變數),可以使用transmute()函數:
transmute(flights, gain = arr_delay - dep_delay, gain_per_hour = gain / (air_time / 60))Source: local data frame [336,776 x 2] gain gain_per_hour (dbl) (dbl)1 9 2.3788552 16 4.2290753 31 11.6250004 -17 -5.5737705 -19 -9.8275866 16 6.4000007 24 9.1139248 -11 -12.4528309 -5 -2.14285710 10 4.347826.. ... ...
6.數據匯總
在dplyr包里我們使用summerise()函數進行數據匯總。下面的代碼表示對平均離開時間的延誤時間取平均,其中na.rm則表示去除所有含有缺失數據的行。
summarise(flights, delay = mean(dep_delay, na.rm = TRUE))Source: local data frame [1 x 1] delay (dbl)1 12.63907
除此之外,我們還可以用sample_n() and sample_frac()函數隨機選擇計算匯總數據。
7.數據分組
在dplyr中我們使用group_by來分類數據,比如以下代碼第一句便表示通過tailnum這個屬性對航班數據進行分類。
by_tailnum <- group_by(flights, tailnum)delay <- summarise(by_tailnum, count = n(), dist = mean(distance, na.rm = TRUE), delay = mean(arr_delay, na.rm = TRUE))delay <- filter(delay, count > 20, dist < 2000)
8.其他小技巧
n(x) #x中行的數量n_distinct(x): #x中不重複行的數量first(x), last(x) #x中第一行與最後一行
結語
更多內容請關注我的專欄:R語言與數據挖掘 - 知乎專欄
或者關注我的知乎賬號:溫如
推薦閱讀: