R / lubridate:计算两个时期之间重叠的天数

蒂姆 S。

我正在尝试计算两个时间段之间重叠的天数。一个周期固定在开始和结束日期,另一个在数据框中记录为开始和结束日期。

编辑:我正在处理具有发布日期 (df$start) 和取消发布日期 (df$end) 的广告。我试图找出他们在特定月份(my.start = 2018-01-01,my.end = 2018-08-31)在线的天数。

library(dplyr)
library(lubridate)

my.start <- ymd("2018-08-01")
my.end <- ymd("2018-08-31")

df <- data.frame(start = c("2018-07-15", "2018-07-20", "2018-08-15", "2018-08-20", "2018-09-01"), 
                 end   = c("2018-07-20", "2018-08-05", "2018-08-19", "2018-09-15", "2018-09-15"))

# strings to dates
df <- mutate(df, start = ymd(start), end = ymd(end))

# does not work - calculate overlap in days
df <- mutate(df, overlap = intersect(interval(my.start, my.end), interval(start, end)))

结果应该是 0、5、4、12、0 天:

   my.start |-------------------------------| my.end

|-----| (0)
        |---------| (5)
                            |----| (4)
                                   |------------------| (12)
                                             |---------------| (0)

在 Excel 中,我会使用

=MAX(MIN(my.end, end) - MAX(my.start, start) + 1, 0)

但这也不起作用:

# does not work - calculate via min/max
df <- mutate(df, overlap = max(min(my.end, end) - max(my.start, start) + 1, 0))

在我尝试as.numeric()在日期上使用 Excel 方法之前,我想知道是否有更聪明的方法来做到这一点。

编辑:实际上,Excel 数字方法似乎也没有两种工作(所有结果都为零):

# does not work - calculate via numeric

ms.num <- as.numeric(my.start)
me.num <- as.numeric(my.end)

df <- df %>% 
  mutate(s.num = as.numeric(start),
         e.num = as.numeric(end),

         overlap = max(min(e.num, me.num) - max(s.num, ms.num) + 1, 0))

编辑:@akrun 的方法似乎适用于 ymd 日期。但是,它似乎不适用于 ymd_hms 次:

library(dplyr)
library(lubridate)
library(purrr)

my.start <- ymd("2018-08-01")
my.end <- ymd("2018-08-31")

df <- data.frame(start = c("2018-07-15 10:00:00", "2018-07-20 10:00:00", "2018-08-15 10:00:00", "2018-08-20 10:00:00", "2018-09-01 10:00:00"), 
                 end   = c("2018-07-20 10:00:00", "2018-08-05 10:00:00", "2018-08-19 10:00:00", "2018-09-15 10:00:00", "2018-09-15 10:00:00"))

# strings to dates
df <- mutate(df, start = ymd_hms(start), end = ymd_hms(end))

# leads to 0 results
df %>% mutate(overlap = map2(start, end, ~ sum(seq(.x, .y, by = '1 day') %in% seq(my.start, my.end, by = '1 day'))))
扎克

我认为您可能会遇到maxand minvs pmaxand 的问题pmin

library(dplyr)

df %>%
  mutate(overlap = pmax(pmin(my.end, end) - pmax(my.start, start) + 1,0))

       start        end overlap
1 2018-07-15 2018-07-20  0 days
2 2018-07-20 2018-08-05  5 days
3 2018-08-15 2018-08-19  5 days
4 2018-08-20 2018-09-15 12 days
5 2018-09-01 2018-09-15  0 days

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算R中两个日期之间的天数

来自分类Dev

计算两个日期之间不包括星期日的天数,并在R DataFrame中创建一个新列

来自分类Dev

R:计算并绘制两个密度国家之间的差异

来自分类Dev

以R中两个坐标之间的间隔计算点

来自分类Dev

计算R中两个图之间的面积

来自分类Dev

R如何计算两个矩阵行之间的差异?

来自分类Dev

R中同一列中两个日期之间的天数差异

来自分类Dev

两个二进制R数据帧中的列重叠,并计算每列的重叠/不重叠

来自分类Dev

从R中的两个独立数据库计算每个重叠日期范围

来自分类Dev

计算两个日期之间的天数?

来自分类Dev

计算两个日期之间的天数

来自分类Dev

使用API计算R内两个机场(两列)之间的距离?

来自分类Dev

计算两个椭圆之间的重叠

来自分类Dev

R计算出日期之间有间隔/重叠的总天数

来自分类Dev

计算R中两个不同数据帧中两个时间戳之间的行

来自分类Dev

计算 R 中的总观察天数(lubridate + dplyr)

来自分类Dev

如何计算R中两个矩阵之间的欧式距离

来自分类Dev

计算两个日期类型字符串之间的时间以获得R年

来自分类Dev

计算R中两个事件(给定的日期和时间)之间的时差

来自分类Dev

如何计算矩阵中两个元素之间的最大欧几里得距离-R?

来自分类Dev

R中是否可以计算两个不同事件之间事件发生的次数?

来自分类Dev

在R中两个瘦高个矩阵之间计算按行点积的最快方法

来自分类Dev

计算JPA中两个日期之间的天数

来自分类Dev

如何计算两个日期之间的天数

来自分类Dev

计算java中两个日期之间的天数

来自分类Dev

Python如何计算两个日期之间的天数?

来自分类Dev

如何计算两个日期之间的天数

来自分类Dev

如何计算两个日期之间的星期天数

来自分类Dev

计算天数,小时和两个时刻之间分钟

Related 相关文章

  1. 1

    计算R中两个日期之间的天数

  2. 2

    计算两个日期之间不包括星期日的天数,并在R DataFrame中创建一个新列

  3. 3

    R:计算并绘制两个密度国家之间的差异

  4. 4

    以R中两个坐标之间的间隔计算点

  5. 5

    计算R中两个图之间的面积

  6. 6

    R如何计算两个矩阵行之间的差异?

  7. 7

    R中同一列中两个日期之间的天数差异

  8. 8

    两个二进制R数据帧中的列重叠,并计算每列的重叠/不重叠

  9. 9

    从R中的两个独立数据库计算每个重叠日期范围

  10. 10

    计算两个日期之间的天数?

  11. 11

    计算两个日期之间的天数

  12. 12

    使用API计算R内两个机场(两列)之间的距离?

  13. 13

    计算两个椭圆之间的重叠

  14. 14

    R计算出日期之间有间隔/重叠的总天数

  15. 15

    计算R中两个不同数据帧中两个时间戳之间的行

  16. 16

    计算 R 中的总观察天数(lubridate + dplyr)

  17. 17

    如何计算R中两个矩阵之间的欧式距离

  18. 18

    计算两个日期类型字符串之间的时间以获得R年

  19. 19

    计算R中两个事件(给定的日期和时间)之间的时差

  20. 20

    如何计算矩阵中两个元素之间的最大欧几里得距离-R?

  21. 21

    R中是否可以计算两个不同事件之间事件发生的次数?

  22. 22

    在R中两个瘦高个矩阵之间计算按行点积的最快方法

  23. 23

    计算JPA中两个日期之间的天数

  24. 24

    如何计算两个日期之间的天数

  25. 25

    计算java中两个日期之间的天数

  26. 26

    Python如何计算两个日期之间的天数?

  27. 27

    如何计算两个日期之间的天数

  28. 28

    如何计算两个日期之间的星期天数

  29. 29

    计算天数,小时和两个时刻之间分钟

热门标签

归档