使用tidyverse创建变量而不是基数R

时间:2019-02-08 01:25:57

标签: r dplyr

我有入学月份的数据。我想以整齐的方式做

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"

2 个答案:

答案 0 :(得分: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],这也许是跳过燃烧以获取水的方法。但是,如果与其他操作结合使用,则其中一项更为合适。

答案 1 :(得分:0)

为什么不为此使用lubridate?如果“月”列是日期对象,则可以

df %>% mutate(qtr = lubridate::floor_date(amonth, "3 month"))