首页 > 解决方案 > 根据日期范围创建新的分类变量列

问题描述

我有一个数据框,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")
  )

这并没有给我我想要的东西(请不要笑!)。谁能帮助我如何实现这一目标?

标签: rtidyverse

解决方案


您的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

推荐阅读