【问题标题】:How to calculate the month interval in a dataset?如何计算数据集中的月份间隔?
【发布时间】:2016-09-23 20:17:46
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 你尝试了什么?这对stackoverflow.com/questions/13287798/… 有帮助吗?仅供参考,您只需使用data.frame(month1 = c("Jul-96","Aug-96","Sep-96"), month2 = c("Jul-97","Sep-97","Nov-97")) 即可创建data
  • 我试过了,但似乎无法在数据集中进行计算。谢谢

标签: r date time intervals


【解决方案1】:

我们可以通过从 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类,得到list元素中对应值与Reduce的差值,取绝对值(如果是负数)和做上面的算术。

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

【讨论】:

  • 谢谢。它有帮助
【解决方案2】:

它并不过分漂亮,但通过转换为as.POSIXlt datetime 对象,您可以进行一些简单的求和:

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

【讨论】:

  • with(..., ceiling(difftime(month2, month1) / 30))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多