我想确定一个向量(时间范围)中包含所有月份的最短连续月份数。
当月份都在一年中时,这可以很容易地完成:
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有没有人知道计算时间范围的好方法,处理一年的开始/结束?
发布于 2018-07-25 06:56:35
这个怎么样?
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] 7https://stackoverflow.com/questions/51508374
复制相似问题