
R for Data Science
tidy流處理數(shù)據(jù)的方便,我想這與管道符%>% 的使用,數(shù)據(jù)處理動詞化,有著很重要的關系。
用最少的時間,解決最重要的、最常見的問題,我把這稱為是高效;剩余的難點,我把其稱為提高。
mutate動詞的使用
首先需要明確的是
mutate是在原有的變量基礎上,再創(chuàng)造相關變量,保留原來的變量。
在這個基礎之上,展開實戰(zhàn)
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
上面的例子是利用現(xiàn)有的時間和距離計算了飛機的速度,以及總共多出的時間。
mutate函數(shù)的強大之處在于,你在創(chuàng)建新變量的同時,你就可以使用新變量再創(chuàng)造新的變量,這一點結合管道符,可以發(fā)揮很大的作用。
例如
mutate(flights_sml,
gain = dep_delay - arr_delay,
hours = air_time / 60,
gain_per_hour = gain / hours
)
transmute()函數(shù)使用
如果只想保留新變量,那么就可以使用transmute()函數(shù)。例如
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的其他用法
創(chuàng)建新的變量,不止可以使用算數(shù)方法,其實還包括邏輯值使用方法。我經常使用mutate結合邏輯判斷值進行新變量創(chuàng)造。
使用TCGA數(shù)據(jù),編號14,15位如果小于11,記為“cancer”,否則記為“normal”可以如下寫
mutate(data, type = ifelse(sample_type_id < 11, 'cancer', 'normal'))
**再結合之前select排序,改變以下位置就好。
rename的使用
rename其實算不上創(chuàng)建新變量,因為只是對變量的名稱進行了修改。
具體使用如下:
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不好識別,需要重新命名,方便后續(xù)分析。
這次的創(chuàng)建新變量,我感覺是比較簡單的,不用寫太多