如何用base R生成循环取值的数字序列(如月份序列)
实现循环数字序列的Base R原生方案
你可以通过模运算的特性用几行极简的原生代码实现需求,无需依赖第三方包:
# 通用实现,支持自定义循环长度 fx <- function(x, cycle = 12) { res <- (seq(x[1], x[1] + length(x) - 1) - 1) %% cycle + 1 cat(paste(res, collapse = ", "), "\n") invisible(res) }
效果验证
- 顺向非跨周期场景
输入fx(5:10),输出:5, 6, 7, 8, 9, 10 - 反向跨周期场景
输入fx(10:3),输出:10, 11, 12, 1, 2, 3
逻辑说明
核心利用模运算的循环特性:先从输入序列的第一个值开始,生成和输入序列长度完全一致的连续整数;减1操作是为了把计数区间对齐到0起始的模运算规则,取模完成后再加1,就能转回1到循环长度的常规计数规则。如果需要适配其他循环场景,只需要修改
cycle参数即可,比如季度循环设为4、星期循环设为7都可以直接复用。
内容的提问来源于stack exchange,提问作者Lucas Fortini
相关产品推荐
相关产品推荐

