В чистом R вы можете использовать as.numeric
с format
.
subset(data, subset=as.numeric(format(start_date, "%m"))==5 &
as.numeric(format(end_date, "%m"))==5)
start_date end_date
8 2020-05-06 2020-05-26
или с помощью lubridate для уменьшения кода:
library(lubridate)
subset(data, month(start_date)==5 & month(end_date)==5)
start_date end_date
8 2020-05-06 2020-05-26
Использование as.numeric
на самом деле не требуется для этого примера, но предположим, что теперь вы хотите подмножество строк, в которых дата составляет между двумя месяцами, скажем, май и июнь. Мы можем легко изменить приведенный выше код следующим образом.
> subset(data, month(start_date)>=5 & month(end_date)<=6)
start_date end_date
8 2020-05-06 2020-05-26
9 2020-05-25 2020-06-14
И чтобы включить год, мы просто используем as.Date()
вместо month
.
subset(data, start_date>=as.Date("2020-04-01") & end_date<=as.Date("2020-05-31"))
start_date end_date
5 2020-04-10 2020-04-30
6 2020-04-10 2020-04-30
7 2020-04-20 2020-05-10
8 2020-05-06 2020-05-26
Данные :
data <- structure(list(start_date = structure(c(18311.2161748139, 18312.2842345089,
18326.147890578, 18349.8989499761, 18362.2961949771, 18362.3596080979,
18372.229088068, 18388.4478125423, 18407.5741012516, 18430.0561228655
), class = "Date"), end_date = structure(c(18331.2161748139,
18332.2842345089, 18346.147890578, 18369.8989499761, 18382.2961949771,
18382.3596080979, 18392.229088068, 18408.4478125423, 18427.5741012516,
18450.0561228655), class = "Date")), row.names = c(NA, -10L), class = "data.frame")
start_date end_date
1 2020-02-19 2020-03-10
2 2020-02-20 2020-03-11
3 2020-03-05 2020-03-25
4 2020-03-28 2020-04-17
5 2020-04-10 2020-04-30
6 2020-04-10 2020-04-30
7 2020-04-20 2020-05-10
8 2020-05-06 2020-05-26
9 2020-05-25 2020-06-14
10 2020-06-17 2020-07-07