R语言中针对纵向数据基于日期创建哑变量的实现方法
R中按两个日期字段的比较结果生成指定哑变量
操作前首先要确认consultation_date和registration_date两个字段已经被解析为R的标准Date类型,直接对字符串格式的日期做大小比较会按文本字符顺序判断,结果完全不可靠。你给出的示例数据是日/月/年的日期格式,先用下面的代码做类型转换:
# 适配示例中的dd/mm/yyyy日期格式,把字段转为Date类型 df$consultation_date <- as.Date(df$consultation_date, format = "%d/%m/%Y") df$registration_date <- as.Date(df$registration_date, format = "%d/%m/%Y")
方法1:基础R实现(无需安装额外包)
R里逻辑值TRUE转整数会自动变为1,FALSE转整数变为0,刚好匹配你的赋值规则:就诊日期大于登记日期赋值1,其余(小于、等于)情况赋值0,直接用逻辑判断即可生成变量:
df$new_dummy <- as.integer(df$consultation_date > df$registration_date)
方法2:dplyr实现(适配tidyverse数据处理流程)
如果你平时用dplyr做数据清洗,可以用mutate()函数生成新变量:
# 未安装dplyr先运行 install.packages("dplyr") library(dplyr) df <- df %>% mutate(new_dummy = as.integer(consultation_date > registration_date))
特殊场景处理
如果需要把两个日期相等的情况单独赋值(比如设为缺失值),可以用ifelse()写分层判断逻辑:
df$new_dummy <- ifelse( df$consultation_date < df$registration_date, 0, ifelse(df$consultation_date > df$registration_date, 1, NA) )
用你提供的示例数据运行上述代码,生成的new_dummy取值和示例表完全一致。
内容的提问来源于stack exchange,提问作者abrar_r
相关产品推荐
相关产品推荐

