使用fct_collapse处理Date类报错,求自定义日期分组解决方案
解决Date类型数据的手动区间分组问题
核心解决思路
不用来回转换日期类型,直接利用dplyr::case_when对Date列做区间判断生成分组,这是处理日期区间分组最直接的方式,能避开forcats函数不支持Date类型的问题。
修正后的代码
先修正你原代码中日期区间的顺序错误(原"12 months"区间是倒序,无法匹配任何数据),再用case_when实现分组:
library(dplyr) plot_by_date <- by_date_total %>% mutate( # 按手动定义的区间分组 date_group = case_when( date >= as.Date("2020-03-15") & date <= as.Date("2020-09-14") ~ "6 months", date >= as.Date("2021-03-15") & date <= as.Date("2021-09-14") ~ "12 months", date >= as.Date("2022-03-15") & date <= as.Date("2022-09-14") ~ "18 months", date >= as.Date("2022-09-15") & date <= as.Date("2022-11-14") ~ "18 months+", # 剩余未匹配的日期归为例外组 TRUE ~ "其他时段" ), # 可选:将分组转为因子并指定顺序,方便后续绘图时按逻辑顺序展示 date_group = factor(date_group, levels = c("6 months", "12 months", "18 months", "18 months+", "其他时段")) ) # 验证分组结果 head(plot_by_date)
原有方法出错的原因
fct_collapse的局限性:
这个函数仅用于合并因子水平或字符向量,不支持直接处理Date类型的列,因此会触发.fmust be a factor or character vector的错误。字符型转换后的错误:
你尝试用"2020-03-15" - "2020-09-14"表示区间,但减号是数值运算符,字符类型无法执行减法,因此出现"non-numeric argument to binary operator"错误,且这种写法本身也无法正确表示日期区间。
内容的提问来源于stack exchange,提问作者CastleBby
相关产品推荐
相关产品推荐

