Agnieszka
Agnieszka

Reputation: 81

How many days from the list were in given period [R]

I’d like to count using R, how many days of given list:

 2020-10-01
 2020-10-03
 2020-10-07
 2020-10-08
 2020-10-09
 2020-10-10
 2020-10-14
 2020-10-17
 2020-10-21
 2020-10-22
 2020-10-27
 2020-10-29
 2020-10-30

Were in given period from start to end:

  id       start         end
   1    2020-10-05   2020-10-30
   2    2020-10-06   2020-10-29
   3    2020-10-10   2020-10-12

And the result should be for example:

  id     number of days
  1             5   
  2            18
  3            12

Upvotes: 0

Views: 44

Answers (2)

Edo
Edo

Reputation: 7858

Here you can find a tidyverse approch with lubridate and dplyr.

library(lubridate)
library(dplyr)

df %>%
 count(id, start, end, 
       wt = days %within% interval(start, end), 
       name = "number_of_days")

#>      id start      end        number_of_days
#> 1     1 2020-10-05 2020-10-30             11
#> 2     2 2020-10-06 2020-10-29             10
#> 3     3 2020-10-10 2020-10-12              1

For each row, count the number of days within the interval of start and end (extremes included).

(If you don't want to see start and end just remove them from the first line of count)


Where:

days <- c("2020-10-01",
          "2020-10-03",
          "2020-10-07",
          "2020-10-08",
          "2020-10-09",
          "2020-10-10",
          "2020-10-14",
          "2020-10-17",
          "2020-10-21",
          "2020-10-22",
          "2020-10-27",
          "2020-10-29",
          "2020-10-30")


df <- read.table(text = "  id       start         end
   1    2020-10-05   2020-10-30
   2    2020-10-06   2020-10-29
   3    2020-10-10   2020-10-12", header = TRUE)


days <- as.Date(days)
df$start <- as.Date(df$start)
df$end   <- as.Date(df$end)

Upvotes: 2

Ronak Shah
Ronak Shah

Reputation: 389175

Assuming all the dates are of date class you can use mapply :

df2$num_days <- mapply(function(x, y) sum(df1$dates >= x & df1$dates <= y), df2$start, df2$end)

Upvotes: 0

Related Questions