我想确定包含向量(时间范围)内所有月份的最短连续月份数。
当月份都在一年中的时候,这很容易实现:
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
有人知道一种计算时间范围的好方法,用于处理一年的开始/结束时间吗?
答案 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