R for Data Science
tidy流处理数据的方便,我想这与管道符%>% 的使用,数据处理动词化,有着很重要的关系。
arrange()
arrange()的工作方式与filter()类似,不同之处在于它不是选择行,而是改变它们的顺序。
默认排序是升序排列,数据依然使用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>
可以看出,可以选择多个变量进行排序,依次进行。
同样降序的要求如何达到,配合使用desc()函数。其实就是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包的开发者大神,在这些函数背后,都为我们做好了,我们顺手拿来用就好了。
当然,对于基础函数,还有order()函数,sort()函数,都是可以运用的。
但是我觉得,这些都不是最重要的,能解决问题就好,将一项技能运用的娴熟很重要。如果,有需要自己写包的话,可以多了解一些基础函数,单纯是数据分析的话,我还是喜欢tidyverse这种动词话的操作,和python就有点像了。
排序拓展
总感觉写一个函数,没什么干货,写一项我自己平时用到的排序。
要求A数据框按照B数据框的数据排序(顺序一致)
我的操作一般是这样(没有用tidyverse)
A %>%
column_to_rownames('NAME') %>%
.[rownames(B),]
欢迎交流