【问题标题】:Difference in months ignoring the day忽略日期的月份差异
【发布时间】:2021-06-27 10:47:27
【问题描述】:

我正在尝试获取我的数据框列与特定日期之间的月份差异。 我使用包 lubridate 中的函数间隔,如下所示:

enrollment <- c("2020-10-25", "2019-10-26", "2019-11-26", "2020-09-29", "2020-12-29", "2020-05-30", "2020-06-30")
df <- as.data.frame(enrollment)

df$months <- interval(df$enrollment,ymd('20201231'))
df$months  <- df$months %/% months(1)

结果:

  enrollment months
1 2020-10-25      2
2 2019-10-26     14
3 2019-11-26     13
4 2020-09-29      3
5 2020-12-29      0
6 2020-05-30      7
7 2020-06-30      6

这给出了日期之间的差异,但它考虑了我想忽略的日期。例如,对于日期 2020-10-25,我希望月份值仍等于 3,但考虑到日期,它是 2。

关于如何做到这一点的任何想法?

谢谢!

【问题讨论】:

  • 我不明白,"2020-12-31""2020-10-25" 晚了两个月(不考虑月份)。

标签: r lubridate


【解决方案1】:
library(lubridate)
library(dplyr)

df <- data.frame(
  enrollment = c("2020-10-25", "2019-10-26", "2019-11-26", "2020-09-29", "2020-12-29", "2020-05-30", "2020-06-30"),
  date_related = ymd('20201231')
) %>%
  mutate(
    enrollment = ymd(enrollment),
    diff_month = (year(date_related) - year(enrollment))*12 + # for difference in years, adding 12 for each year
      (month(date_related) - month(enrollment)) + # difference in month
      if_else(day(date_related) >= day(enrollment), 1, 0) # if day component of the reference date is greater or equal to day component of the enrollment date, adding 1
  )

【讨论】:

    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2019-12-27
    相关资源
    最近更新 更多