如何仅修改指定假期日期的daytype列值(无需else分支)
解决方法
你的核心需求是在已生成的daytype基础上,仅将指定假期日期的daytype更新为weekend/holiday,不改动其他日期的原有值。先指出你尝试代码里的问题,再给出两种可行方案:
你代码里的问题
- 日期未做格式处理:直接写
2022-09-05会被R当作数值计算(2022-9-5=2008),必须用引号包裹并转为日期类型 - 存在笔误:
202-07-04应为2023-07-04 case_when必须覆盖所有分支,你需要保留原有daytype作为默认分支
方案一:用case_when保留原有值
通过TRUE ~ daytype作为默认分支,让非目标日期保持原daytype不变:
library(dplyr) dates <- dates %>% mutate(daytype = case_when( date %in% as.Date(c("2022-09-05", "2022-11-11", "2022-11-24", "2022-12-26", "2023-01-02", "2023-01-16", "2023-02-20", "2023-05-14", "2023-06-19", "2023-07-04")) ~ "weekend/holiday", TRUE ~ daytype # 保留原有daytype值 ))
方案二:直接条件赋值(更简洁)
无需case_when,直接定位目标日期行修改daytype:
# 定义目标假期日期(转为Date类型) holiday_dates <- as.Date(c("2022-09-05", "2022-11-11", "2022-11-24", "2022-12-26", "2023-01-02", "2023-01-16", "2023-02-20", "2023-05-14", "2023-06-19", "2023-07-04")) # 仅修改符合条件的行 dates$daytype[dates$date %in% holiday_dates] <- "weekend/holiday"
注意事项
- 确保你的
date列是Date类型,如果不是先转换:dates$date <- as.Date(dates$date) - 检查所有日期格式,避免类似
202-07-04的笔误
内容的提问来源于stack exchange,提问作者Ryan Gary
相关产品推荐
相关产品推荐

