tidy流处理数据越来越流行,我想这与管道符%>% 的使用,数据处理动词化,有着很重要的关系。
用最少的时间,解决最重要的、最常见的问题,我把这称为是高效;剩余的难点,我把其称为提高。
filter动词的使用
首先需要明确的是
filter针对的是行的操作, select是针对列的操作
在这个基础之上,展开实战
使用nycflights13 包中的数据进行演示
###1. 单独提出某一行
观察数据特点
flights
#> # 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>
####提取月份为1,日期为1的数据
filter(flights, month == 1, day == 1)
#> # A tibble: 842 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 836 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>
或者直接赋值给某一个变量
jan1 <- filter(flights, month == 1, day == 1)
插播一个操作技巧,在变量两侧加上括号,也可以直接显示,结果
(jan1 <- filter(flights, month == 1, day == 1))
###2. 加入逻辑运算符提取多行
“&” 是“和”,“|” 是“或”,“!"指代“不是”
加上逻辑运算符,配合管道符,就可以进行多项条件选取的操作。
例如,要选取月份为11和12的观察选项,就会有两种写法
filter(flights, month == 11 | month == 12)
或者
nov_dec <- filter(flights, month %in% c(11, 12))
%in%是匹配符,在判断的时候经常用到
####参考资料
https://r4ds.had.co.nz/transform.html