查找月份的时间范围,逐年滚动

时间:2018-07-24 22:25:23

标签: r date

我想确定包含向量(时间范围)内所有月份的最短连续月份数。

当月份都在一年中的时候,这很容易实现:

mos_summer <- c(6, 5, 6, 7, 9)
# desired answer: 5 months (May-September) encompass all values in mos_summer

max(mos_summer) - min(mos_summer) + 1  # produces 5 (correct!)

但是,当月份在年初/年底附近时,这种方法就会失效。

mos_winter <- c(12, 11, 1, 1, 12)
# desired answer: 3 months (November-January) encompass all values in mos_winter

max(mos_winter) - min(mos_winter) + 1  # produces 12 (wrong!)

This previous question演示了使用mod的php解决方案;但是,这似乎在R中不起作用:

(12 + max(mos_winter) - min(mos_winter) + 1) %% 12  # produces 0

有人知道一种计算时间范围的好方法,用于处理一年的开始/结束时间吗?

1 个答案:

答案 0 :(得分:3)

怎么样?

mos_summer <- c(6, 5, 6, 7, 9)
mos_winter <- c(12, 11, 1, 1, 12)

min.month.range <- function(x) {
    x1 <- x
    x2 <- ifelse(x <= 6, x + 12, x)
    min(diff(range(x1)) + 1, diff(range(x2)) + 1)
}

min.month.range(mos_summer)
#[1] 5

min.month.range(mos_winter)
#[1] 3

min.month.range(c(1, 3, 11))
#[1] 5

min.month.range(c(1, 11, 12))
#[1] 3

min.month.range(c(1, 7))
#[1] 7