You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求指导:针对字符型日期列DOB使用case_when的正确代码写法

字符型日期列的case_when正确处理写法

原代码存在两个核心问题:

  • 字符型日期无法直接通过字符串比较得到正确的日期逻辑(字符串按字符顺序比对,和实际日期逻辑不符)
  • 条件表达式写法错误,DOB %in% '1/1/1945' > '31/12/1967'完全不符合区间判断的语法逻辑

正确写法步骤:

  1. 先将字符型日期转换为R可识别的日期类型(推荐用lubridate包的日期解析函数,适配日/月/年格式)
  2. 在case_when中使用日期类型进行区间判断

代码示例(保留转换后的日期列):

library(dplyr)
library(lubridate)

data1 %>% 
  mutate(
    # 把字符型DOB转为日期型,适配日/月/年格式
    DOB_date = dmy(DOB),
    generation = case_when(
      # 判断出生日期在1945-01-01至1967-12-31之间
      DOB_date >= dmy("1/1/1945") & DOB_date <= dmy("31/12/1967") ~ "baby_boomers",
      # 其他所有情况
      TRUE ~ "else"
    )
  )

简化写法(直接在判断中转换,不新增列):

library(dplyr)
library(lubridate)

data1 %>% 
  mutate(generation = case_when(
    dmy(DOB) >= dmy("1/1/1945") & dmy(DOB) <= dmy("31/12/1967") ~ "baby_boomers",
    TRUE ~ "else"
  ))

注意事项:

  • 如果你的日期格式是月/日/年,将dmy()替换为mdy()即可
  • 确保已安装并加载lubridate包,若未安装可先运行install.packages("lubridate")

内容的提问来源于stack exchange,提问作者Sultan of swing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:25:14