我有有入园一个月的数据。我想这样做在一个整洁的方式
df$qrtr[df$amonth %in% 1:3]<- "a"
df$qrtr[df$amonth %in% 4:6] <- "b"
df$qrtr[df$amonth %in% 7:9]<- "c"
df$qrtr[df$amonth %in% 10:12]<- "d"
作为@Tung建议,dplyr的case_when可用于:
df %>%
mutate(qtr = case_when(
.$amonth %in% 1:3) ~ 'a',
.$amonth %in% 4:6) ~ 'b',
.$amonth %in% 7:9) ~ 'c',
.$amonth %in% 10:12) ~ 'd',
TRUE ~ NA))
稍微更可读的做法是组合。管道的dplyr方法是提高可读性,这样的组合可以做的:
seasons <- rep(c('a','b','c','d'), each=3)
df %>% mutate(qtr=seasons[amonth])
这也许可以越过烧伤打水,作为第二线相当于df$qtr <- seasons[df$amonth]
。但是,如果与其他业务相结合,一个或另一个更加贴合。
为什么不使用lubridate这个?如果“amonth”一栏是日期对象,您可以
df %>% mutate(qtr = lubridate::floor_date(amonth, "3 month"))