subset by date in R within each year

My data are as follows:

site year date
A    2019 2019-08-08
A    2019 2019-08-18
A    2019 2019-10-14
A    2019 2019-10-27
B    2019 2019-08-07
B    2019 2019-08-19
B    2019 2019-10-15
B    2019 2019-10-20
A    2020 2020-08-08
A    2020 2020-08-18
A    2020 2020-10-14
A    2020 2020-10-27
B    2020 2020-08-07
B    2020 2020-08-19
B    2020 2020-10-15
B    2020 2020-10-20

For each year, I would like to subset rows that fulfill the following conditions:

=<October 15
and >=August 15

Thank you in advance!

>Solution :

Convert to yearday and use filter

library(dplyr)
library(lubridate)
df1 %>% 
  mutate(date = ymd(date)) %>% 
  filter(between(yday(date), 228, 289))

-output

 site year       date
1    A 2019 2019-08-18
2    A 2019 2019-10-14
3    B 2019 2019-08-19
4    B 2019 2019-10-15
5    A 2020 2020-08-18
6    A 2020 2020-10-14
7    B 2020 2020-08-19
8    B 2020 2020-10-15

data

df1 <- structure(list(site = c("A", "A", "A", "A", "B", "B", "B", "B", 
"A", "A", "A", "A", "B", "B", "B", "B"), year = c(2019L, 2019L, 
2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 2020L, 2020L, 2020L, 
2020L, 2020L, 2020L, 2020L, 2020L), date = c("2019-08-08", "2019-08-18", 
"2019-10-14", "2019-10-27", "2019-08-07", "2019-08-19", "2019-10-15", 
"2019-10-20", "2020-08-08", "2020-08-18", "2020-10-14", "2020-10-27", 
"2020-08-07", "2020-08-19", "2020-10-15", "2020-10-20")), 
class = "data.frame", row.names = c(NA, 
-16L))

Leave a Reply