如何计算数据集中的月份间隔?

How to calculate the month interval in a dataset?

我有下面的数据集,我想计算每一行的月份间隔。(包括开始月份和结束月份)

month1 <- c("Jul-96","Aug-96","Sep-96")
month2 <- c("Jul-97","Sep-97","Nov-97")

data <- as.data.frame(cbind(month1,month2))

我希望结果成为如下数据集:

month1  month2  interval 
Jul-96  Jul-97  13
Aug-96  Sep-97  14
Sep-96  Nov-97  15

谢谢。

它并不太漂亮,但是通过转换为 as.POSIXlt 日期时间对象,您可以进行一些简单的求和:

with(
  lapply(data, function(x) as.POSIXlt(paste0("01-", x), format="%d-%b-%y", tz="UTC") ),
  (month2$year - month1$year)*12 + month2$mon - month1$mon + 1
)
#[1] 13 14 15

我们可以通过从 zoo 转换为 yearmon class 并得到差值来做到这一点

library(zoo)
12*(as.yearmon(data$month2, '%b-%y')-as.yearmon(data$month1, '%b-%y'))+1
#[1] 13 14 15

或者用lapply遍历列,转换为yearmonclass,得到list元素中对应值与[=18的差值=],取绝对值(如果它是负数)并按照上面的方法进行算术运算。

abs(Reduce(`-`,lapply(data, as.yearmon, format = '%b-%y')))*12 + 1
#[1] 13 14 15