如何创建并合并lubridate周期区间?R语言cut函数使用疑问
合并lubridate周期区间的解决方案
你已经通过cut()函数将lubridate::period类型的年龄数据划分成了(0,5]和(5,10]两个区间,以下是两种合并为(0,10]区间的方法:
方法一:直接生成目标区间(一步到位)
如果不需要保留原来的细分区间,直接重新调用cut()设置更宽的区间即可:
# 给数据框添加合并后的区间列 df$age_merged <- cut(df$age, breaks = c( lubridate::period(c(0,0,0), c("day","month","year")), lubridate::period(c(0,10,0), c("day","month","year")) ), include.lowest = FALSE)
方法二:基于已有的cut结果合并
如果已经有了细分后的区间结果(比如存在cut_result变量),可以通过因子重编码合并:
基础R实现
# 先获取你已有的cut结果 cut_result <- cut(df$age, breaks = c( lubridate::period(c(0,0,0), c("day","month","year")), lubridate::period(c(0,5,0), c("day","month","year")), lubridate::period(c(0,10,0), c("day","month","year")) )) # 将两个细分区间合并为(0,10] merged_group <- factor( ifelse(cut_result %in% levels(cut_result), "(0,10]", NA), levels = "(0,10]" )
使用forcats包简化操作
如果你安装了forcats包,用fct_collapse可以更简洁地完成合并:
library(forcats) merged_group <- fct_collapse(cut_result, "(0,10]" = levels(cut_result))
内容的提问来源于stack exchange,提问作者python_programmer
相关产品推荐
相关产品推荐

