本篇文章要介绍在 dplyr 的一些常用函数,除了上次介绍的 filter 和 arrange ,今天会介绍 select 和 mutate。
library(tidyverse)library(nycflights13)
今天我们使用的一样是 nycflights13 里头的 flights 这笔资料。
glimpse(flights)
可以看到它是336776x19的资料框,有就是我们有336776笔资料,且有19种变数。
因为可能会有我们暂时不需要的变数,所以我们可以使用 select 去缩小我们的资料框。如下:
select(flights,year,month,day)
如此以来我们就会变成336776x3的资料框,语法和上次的函数类似,前面是填入你的资料,而后面就是你想要留下的变数,也可以有一些特别的操作。
select(flights,year:day)
上述程式码代表的是选择year到day之间的所有变数,因为之间只有month,所以一样是336776x3的资料框。其实也可以用扣的!
select(flights,-(year:day))
上述程式码会把除了year,month,day以外的变数都留下来。
而select里面还有一些其他的语法。
select(flights,starts_with("dep"))
starts_with ("dep") 会把开头是"dep"的变数都留下来。
select(flights,ends_with("time"))
ends_with("time") 会把结尾是"time"的变数都留下来。
select(flights,contains("rr"))
contains("rr") 会把变数中含有"rr"字串的变数都留下来。
我们也可以利用 rename 进行变数改名。
n_flights<-rename(flights,ABC=tailnum)glimpse(n_flights)
也可以搭配 everything() 把一些变数移至前面。
select(flights,time_hour,air_time,everything())
这段程式码的意思是将 time_hour 和 air_time 放到第一和第二行,其他则按照原本的顺序。
如果你想要新增变数,那我们可以使用 mutate 。
mutate(flights,gain=arr_delay-dep_delay)
即可增加新的变数,所以如果你想在资料间做运算是很轻易可以达成的,而 transmute 可以只留下新增的变数。
transmute(flights,gain=arr_delay-dep_delay)
当然你也可以搭配以些四则运算在内部,或是一些内件计算函数,如:sum(),log(),log2()等等。
像是
transmute(flights,a=air_time/60)
就可以对整行做统一的除法,或是
transmute(flights,b=(sched_arr_time)/sum(sched_arr_time))
就可以看出对于整体来说,各资料所佔的比例。也可以取log去做资料调整。
transmute(flights,c=log(sched_arr_time))
当然它的内建函数还很多,我们最后介绍一些常见的排序函数。
(y<-c(1,9,2,NA,3,4))min_rank(y)
如果这个函数无法满足你,也可以试试 row_number() dense_rank percent_rank cume_dist ntile 。
这些都是一些常用来做排序的常见函数,这次的介绍到这里,谢谢大家。下一次我会介绍分组摘要 summarize ,它一样是dplyr的内部函数,在资料分析中也佔着重要的角色。