R for Data Science(筆記) ---數(shù)據(jù)變換(創(chuàng)建新的變量)

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)建新變量,我感覺是比較簡單的,不用寫太多

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容