dplyr-mutate修改列

2020-10-03  本文已影响0人  Mylonely

数据集预览

image.png

增加列

计算航行速度Speed

dt1 <- flights %>% mutate(Speed = distance/air_time)
dt1 %>% select(last_col())
image.png

mutate传入表达式即可在最后一列生成新变量;

transmute()只保留新变量

flights %>% transmute(Speed = distance/air_time)
image.png

如果要进行原列修改,比如修改单位,只要传入原变量名即可

dt1 %>% transmute(Speed = Speed*60)
image.png

mutate变量重编码

if_else

dt1 %>% select(distance) %>% mutate(if_else(distance>mean(distance),true = "远",false="近")) %>%head()
image.png

对于两类别情形的编码,我们可以利用if_else语句完成,分别传入条件,true值,false值即可

case_when

dt1 %>% select(distance) %>% mutate(type=case_when(
  distance >1389 ~ "非常远",
  distance > 872 ~ "较远",
  distance > 502 ~ "一般",
  distance > 100 ~ "较近",
  distance <= 100 ~ "非常近"
)) 
image.png

case_when将高水平条件放在最前面。如果反过来,那么编码将会只有一个类,即最低水平类别


image.png

此外,如果我们生成的是有序的因子型变量,需要另外再做出声明

##声明因子型
dt2 <-dt1 %>% select(distance) %>% mutate(type=case_when(
  distance >1389 ~ "非常远",
  distance > 872 ~ "较远",
  distance > 502 ~ "一般",
  distance > 100 ~ "较近",
  distance <= 100 ~ "非常近"
))  %>% mutate(type = factor(type,levels = c("非常近","较近","一般","较远","非常远")))
上一篇下一篇

猜你喜欢

热点阅读