tidy流处理数据的方便,我想这与管道符%>% 的使用,数据处理动词化,有着很重要的关系。
用最少的时间,解决最重要的、最常见的问题,我把这称为是高效;剩余的难点,我把其称为提高。
mutate动词的使用
首先需要明确的是
mutate是在原有的变量基础上,再创造相关变量,保留原来的变量。
在这个基础之上,展开实战
flights_sml <- select(flights,
year:day,
ends_with("delay"),
distance,
air_time
)
mutate(flights_sml,
gain = dep_delay - arr_delay,
speed = distance / air_time * 60
)
#> # A tibble: 336,776 x 9
#> year month day dep_delay arr_delay distance air_time gain speed
#> <int> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 2013 1 1 2 11 1400 227 -9 370.
#> 2 2013 1 1 4 20 1416 227 -16 374.
#> 3 2013 1 1 2 33 1089 160 -31 408.
#> 4 2013 1 1 -1 -18 1576 183 17 517.
#> 5 2013 1 1 -6 -25 762 116 19 394.
#> 6 2013 1 1 -4 12 719 150 -16 288.
#> # … with 336,770 more rows
上面的例子是利用现有的时间和距离计算了飞机的速度,以及总共多出的时间。
mutate函数的强大之处在于,你在创建新变量的同时,你就可以使用新变量再创造新的变量,这一点结合管道符,可以发挥很大的作用。
例如
mutate(flights_sml,
gain = dep_delay - arr_delay,
hours = air_time / 60,
gain_per_hour = gain / hours
)
transmute()函数使用
如果只想保留新变量,那么就可以使用transmute()函数。例如
transmute(flights,
gain = dep_delay - arr_delay,
hours = air_time / 60,
gain_per_hour = gain / hours
)
#> # A tibble: 336,776 x 3
#> gain hours gain_per_hour
#> <dbl> <dbl> <dbl>
#> 1 -9 3.78 -2.38
#> 2 -16 3.78 -4.23
#> 3 -31 2.67 -11.6
#> 4 17 3.05 5.57
#> 5 19 1.93 9.83
#> 6 -16 2.5 -6.4
#> # … with 336,770 more rows
mutate的其他用法
创建新的变量,不止可以使用算数方法,其实还包括逻辑值使用方法。我经常使用mutate结合逻辑判断值进行新变量创造。
使用TCGA数据,编号14,15位如果小于11,记为“cancer”,否则记为“normal”可以如下写
mutate(data, type = ifelse(sample_type_id < 11, 'cancer', 'normal'))
**再结合之前select排序,改变以下位置就好。
rename的使用
rename其实算不上创建新变量,因为只是对变量的名称进行了修改。
具体使用如下:
rename(flights, tail_num = tailnum)
#> # 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>, tail_num <chr>, origin <chr>, dest <chr>,
#> # air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
通常要使用rename是因为有些名称是以“.”或者空格连接的,会让R不好识别,需要重新命名,方便后续分析。
这次的创建新变量,我感觉是比较简单的,不用写太多
网友评论