根据日期范围创建新的分类变量列

时间:2021-01-10 13:31:18

标签: r tidyverse

我有一个数据框 dat,包含以下列:

   record_id date       
       <dbl> <date>     
 1    111111 1956-10-28 
 2    222222 1956-10-28 
 3    333333 1956-10-29 
 4    444444 1956-10-29 
 5    555555 1956-10-30 

我想在其中创建一个新列,该列根据日期是否在特定范围之间采用不同的值。所需的输出是这样的:

  record_id date       new_var 
       <dbl> <date>     <chr> 
 1    111111 1956-10-28 test1
 2    222222 1956-10-28 test1
 3    333333 1956-10-29 test1
 4    444444 1956-10-29 test1
 5    555555 1956-10-30 test1

我的第一次尝试如下:

dat <- dat %>%
  mutate
    new_var = ifelse(date > as.Date("1954-03-12") & date < as.Date("1958-12-08"), "test1"),
    new_var = ifelse(date > as.Date("1958-09-13") & date < as.Date("1964-03-08"), "test2")
  )

这并没有给我我想要的(请不要笑!)。任何人都可以帮助我了解如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

您的 ifelse 语句几乎没有语法问题。

由于您使用的是 dplyr,因此您可以使用 case_whenbetween 函数简化此过程。

library(dplyr)

dat %>%
  mutate(new_var = case_when(
           between(date, as.Date("1954-03-13"), as.Date("1958-12-07"))~"test1",
           between(date, as.Date("1958-09-14"), as.Date("1964-03-07"))~ "test2")
         )

#  record_id       date new_var
#1    111111 1956-10-28   test1
#2    222222 1956-10-28   test1
#3    333333 1956-10-29   test1
#4    444444 1956-10-29   test1
#5    555555 1956-10-30   test1