R条件语句实操:基于两组日期差值使用mutate添加条件分类标签
解答
完全可以直接用mutate实现,无需额外自定义函数
搭配dplyr内置的case_when()函数即可实现区间分类打标签,逻辑直观易修改,非常适合新手使用。
注意:你计算得到的date_dif是R的difftime时间差类型,判断区间前最好先转成纯数值的天数,避免隐式类型转换引发异常。
实操代码(接续你现有代码运行即可)
# 你之前使用%>%和mutate应该已经加载了dplyr包,没有的话先运行library(dplyr) date_R3 <- date_R2 %>% mutate( # 将时间差转为纯数值天数 date_dif_num = as.numeric(date_dif), # 按自定义区间打标签,case_when按从上到下顺序判断,满足第一个条件就终止匹配 date_level = case_when( date_dif_num < 10 ~ "小于10天", date_dif_num >= 10 & date_dif_num <= 30 ~ "10-30天", date_dif_num > 30 & date_dif_num <= 100 ~ "31-100天", date_dif_num > 100 ~ "大于100天", # 兜底规则,异常值/缺失值统一归类 TRUE ~ "未分类" ) )
运行结果示例
> date_R3 employee startdate endate date_dif date_dif_num date_level 1 Alfred 2019-05-12 2021-11-15 918 days 918 大于100天 2 Mary 2020-09-23 2021-11-15 418 days 418 大于100天 3 Susie 2020-07-12 2021-11-15 491 days 491 大于100天 4 Joan 2021-11-10 2021-11-15 5 days 5 小于10天 5 Dave 2021-09-12 2021-11-15 64 days 64 31-100天
自定义函数实现(适合需要频繁复用同一份分类规则的场景)
如果需要在多个数据集里使用相同的区间规则打标签,可以把判断逻辑封装成简单函数,减少重复代码:
# 定义分类函数,输入为数值型天数 classify_date_diff <- function(days) { case_when( days < 10 ~ "小于10天", days >= 10 & days <= 30 ~ "10-30天", days > 30 & days <= 100 ~ "31-100天", days > 100 ~ "大于100天", TRUE ~ "未分类" ) } # 调用方式 date_R3 <- date_R2 %>% mutate( date_dif_num = as.numeric(date_dif), date_level = classify_date_diff(date_dif_num) )
小提示
如果需要调整区间规则,直接修改case_when里的判断条件和对应标签即可,不需要改动其他逻辑。
内容的提问来源于stack exchange,提问作者Tiago
相关产品推荐
相关产品推荐

