
R for Data Science
tidy流處理數(shù)據(jù)的方便,我想這與管道符%>% 的使用,數(shù)據(jù)處理動詞化,有著很重要的關(guān)系。
arrange()
arrange()的工作方式與filter()類似,不同之處在于它不是選擇行,而是改變它們的順序。
默認(rèn)排序是升序排列,數(shù)據(jù)依然使用flights。例如
arrange(flights, year, month, day)
#> # A tibble: 336,776 x 19
#> year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
#> <int> <int> <int> <int> <int> <dbl> <int> <int>
#> 1 2013 1 1 517 515 2 830 819
#> 2 2013 1 1 533 529 4 850 830
#> 3 2013 1 1 542 540 2 923 850
#> 4 2013 1 1 544 545 -1 1004 1022
#> 5 2013 1 1 554 600 -6 812 837
#> 6 2013 1 1 554 558 -4 740 728
#> # … with 336,770 more rows, and 11 more variables: arr_delay <dbl>,
#> # carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#> # air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
可以看出,可以選擇多個變量進(jìn)行排序,依次進(jìn)行。
同樣降序的要求如何達(dá)到,配合使用desc()函數(shù)。其實(shí)就是descent;descend(下降的英文單詞前幾個字母),所以還是很簡單,人性化的,就和寫文章一樣,所以操作上手都是很快的。
例如
arrange(flights, desc(dep_delay))
#> # A tibble: 336,776 x 19
#> year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
#> <int> <int> <int> <int> <int> <dbl> <int> <int>
#> 1 2013 1 9 641 900 1301 1242 1530
#> 2 2013 6 15 1432 1935 1137 1607 2120
#> 3 2013 1 10 1121 1635 1126 1239 1810
#> 4 2013 9 20 1139 1845 1014 1457 2210
#> 5 2013 7 22 845 1600 1005 1044 1815
#> 6 2013 4 10 1100 1900 960 1342 2211
#> # … with 336,770 more rows, and 11 more variables: arr_delay <dbl>,
#> # carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#> # air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
沒有什么難度,主要是tidyverse包的開發(fā)者大神,在這些函數(shù)背后,都為我們做好了,我們順手拿來用就好了。
當(dāng)然,對于基礎(chǔ)函數(shù),還有order()函數(shù),sort()函數(shù),都是可以運(yùn)用的。
但是我覺得,這些都不是最重要的,能解決問題就好,將一項技能運(yùn)用的嫻熟很重要。如果,有需要自己寫包的話,可以多了解一些基礎(chǔ)函數(shù),單純是數(shù)據(jù)分析的話,我還是喜歡tidyverse這種動詞話的操作,和python就有點(diǎn)像了。
排序拓展
總感覺寫一個函數(shù),沒什么干貨,寫一項我自己平時用到的排序。
要求A數(shù)據(jù)框按照B數(shù)據(jù)框的數(shù)據(jù)排序(順序一致)
我的操作一般是這樣(沒有用tidyverse)
A %>%
column_to_rownames('NAME') %>%
.[rownames(B),]
歡迎交流