过滤到月 - 日间隔

时间:2017-07-08 22:13:53

标签: r lubridate

我有一个数据框,每年都有每日观察结果。我想过滤到一个范围,例如" 3月10日到5月12日"每年。也许这是我糟糕的谷歌搜索技巧,但我无法找到某种日月建设。

这是一个样本df:

set.seed(123)

dates <- seq.Date(from=as.Date("1970-01-01"), to=as.Date("2007-08-31"), by="days")

sample.df <- data.frame(date=dates, 
                        data=rnorm(length(dates)))

另一个复杂的补充是保持一个跨越多年的范围,例如&#34; 12月10日到2月2日。&#34;可以假设所有需要的日期都包含在数据框中,但可能需要制作一些NA,例如数据框到2007年时,所以我们不能做到2007年12月10日到2008年2月2日。

2 个答案:

答案 0 :(得分:2)

这适用于任意年份和任意复杂的逻辑条件。没有包使用。

monthday <- format(sample.df$date, "%m%d")

sample.df[ monthday >= "0310" & monthday <= "0512", ]   # mar 10 - may 12

sample.df[ monthday <= "0202" | monthday >= "1210", ]   # dec 10 - feb 02

sample.df[ monthday <= "0202" | 
           (monthday >= "0310" & monthday <= "0512") | 
           monthday >= "1210", ]   # both

答案 1 :(得分:1)

您可以使用dplyrlubridate

library(dplyr)
library(lubridate)

sample.df %>% filter(between(date, ymd("2006-03-10"), ymd("2006-05-12")))

sample.df %>% filter(between(date, ymd("2006-10-11"), ymd("2007-02-01")))

忽略年份:

sample.df %>% 
   mutate(dummy = (month(date)*100) + day(date)) %>% 
   filter(between(dummy,310,512)) %>% 
   select(-dummy)