使用tidyverse用于创建变量,而不是基础R

问题描述 投票:1回答:2

我有有入园一个月的数据。我想这样做在一个整洁的方式

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"
r dplyr
2个回答
0
投票

作为@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]。但是,如果与其他业务相结合,一个或另一个更加贴合。


0
投票

为什么不使用lubridate这个?如果“amonth”一栏是日期对象,您可以

df %>% mutate(qtr = lubridate::floor_date(amonth, "3 month"))
© www.soinside.com 2019 - 2024. All rights reserved.