Выберите период времени по дню и месяцу

У меня есть датафрейм, организованный по годам. Например: date ‹- seq (as.Date (" 2001-07-20 "), as.Date (" 2010-12-31 "), by = 1)
Теперь я хочу выбрать подмножество с помощью два временных периода: с 23 июня по 13 июля И с 20 июля по 9 августа в 2004-2008 гг. Не могли бы вы дать какую-нибудь подсказку? Спасибо!

Да, это можно решить с помощью: test [date% between% c ("2004-07-20", "2004-08-09")] ... но в моих данных много лет, код может быть очень повторяющийся. Интересно, можно ли это решить так:

df $ md ‹- формат (as.Date (df $ date),"% m-% d ") df‹ - df [df $ md% in% c (as.Date (06-23): Date (07- 13), Дата (07-20): Дата (08-09)) и год% в% (2004: 2008),]

Не работает: ошибка в as.Date.numeric (6-23): необходимо указать origin


person Bob    schedule 08.03.2019    source источник


Ответы (1)


Вы можете построить интересующие вас диапазоны и подмножество:

library(lubridate)    
date <- seq(as.Date("2001-07-20",origin="1970-01-01"),as.Date("2010-12-31",origin="1970-01-01"),by = 1) 

range1 <- as.Date(unlist(lapply(c(0:4),function(y) seq(as.Date("2004-06-23",origin="1970-01-01"),as.Date("2004-07-13",origin="1970-01-01"),by="1 day") + years(y))),origin="1970-01-01")
range2 <- as.Date(unlist(lapply(c(0:4),function(y) seq(as.Date("2004-07-20",origin="1970-01-01"),as.Date("2004-08-09",origin="1970-01-01"),by="1 day") + years(y))),origin="1970-01-01")

date[date %in% range1 | date %in% range2]

Альтернатива

Альтернативный ответ с использованием% между%, как предлагается в OP

library(lubridate)
dates <- seq(as.Date("2001-07-20"),as.Date("2010-12-31"),by = 1)

r1 <- c(as.Date("2004-06-23"),as.Date("2004-07-13"))
r2 <- c(as.Date("2004-07-20"),as.Date("2004-08-09"))

ranges <- lapply(c(0:4),function(y) list(r1=r1 + years(y),r2=r2+years(y)))
as.Date(unlist(lapply(ranges,function(r) { dates[dates %between% r$r1 | dates %between% r$r2] })))
person Soren    schedule 08.03.2019
comment
обновлено, чтобы добавить происхождение. Вы можете узнать больше о датах происхождения и вычислениях здесь: stats.idre.ucla.edu/r/faq/how-does-r-handle-date-values ​​, но R по умолчанию использует 1 января 1970 г. - person Soren; 08.03.2019