如何计算数据集中的月份间隔?
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
遍历列,转换为yearmon
class,得到list
元素中对应值与[=18的差值=],取绝对值(如果它是负数)并按照上面的方法进行算术运算。
abs(Reduce(`-`,lapply(data, as.yearmon, format = '%b-%y')))*12 + 1
#[1] 13 14 15
我有下面的数据集,我想计算每一行的月份间隔。(包括开始月份和结束月份)
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
遍历列,转换为yearmon
class,得到list
元素中对应值与[=18的差值=],取绝对值(如果它是负数)并按照上面的方法进行算术运算。
abs(Reduce(`-`,lapply(data, as.yearmon, format = '%b-%y')))*12 + 1
#[1] 13 14 15