繁体   English   中英

选择R中多年的日期范围

[英]select date ranges for multiple years in r

我有一个包含约4.5年数据的数据集。 我正在尝试为此创建两个不同的数据框,这就是我所说的假期和非假期期间。 每年有多个期间,这些期间将重复多年。

例如,我想选择感恩节和元旦之间的时间段,以及每年的情人节和母亲节之前的时间段,并将其作为我的假期数据框。 其他所有事情都不属于节假日。

很抱歉,如果以前没有问过这个问题,我就是找不到。 我在SQL中发现了类似的问题,但我试图弄清楚如何在R中执行此操作。

我尝试过滤和选择,但无济于事。

wine.holiday <- wine.sub2 %>% 
   select(total, cdate) %>% 
   subset(cdate>=2011-11-25, cdate<=2011-12-31)
wine.holiday

Source: local data frame [27,628 x 3]
Groups: clubgroup_id.x [112]

   clubgroup_id.x total      cdate
            (chr) (dbl)     (date)
1               1    45 2011-10-04
2               1    45 2011-10-08
3               1    45 2011-10-09
4               1    45 2011-10-09
5               1    45 2011-10-11
6               1    45 2011-10-15
7               1    45 2011-10-24
8               1    90 2011-11-13
9               1    45 2011-11-18
10              1    45 2011-11-26
..            ...   ...        ...

显然有些事情是不对的,因为它不仅没有限制日期范围,而且还在数据框中包括了我什至没有选择的列。

如评论中所述,dplyr使用filter而不是subset 只需对您的代码进行简单的更改(因此,不能完全解决问题,但希望有所帮助)就可以使子集正常工作。

wine.holiday <- wine.sub2 %>% 
   select(total, cdate)
wine.holiday <- subset(wine.holiday, cdate>=as.Date("2011-11-25") & cdate<=as.Date("2011-12-31"))
wine.holiday

或者,坚持使用dplyr管道:

wine.holiday <- wine.sub2 %>% 
    select(total, cdate) %>%
    filter( cdate>=as.Date("2011-11-25") & cdate<=as.Date("2011-12-31") )
wine.holiday

编辑添加:如果dplyr选择不起作用(对我来说很好),则可以尝试以下操作:

wine.holiday <- subset( wine.sub2, select = c( total, cdate ) )
wine.holiday <- subset(wine.holiday, cdate>=as.Date("2011-11-25") & cdate<=as.Date("2011-12-31"))
wine.holiday

当然,您可以将这两行合并为一个。 这使它更难阅读,但可能会提高处理效率:

wine.holiday <- subset(wine.sub2, cdate>=as.Date("2011-11-25") & cdate<=as.Date("2011-12-31"), select=c(total,cdate) )

通过浏览SO帖子(花了一段时间),我找到了另一种方法。

> library(dateTime)
> wine.holiday <- data.table(start = c(as.Date(USThanksgivingDay(2010:2020))), 
+                            end = as.Date(USNewYearsDay(2011:2021))-1)
> wine.holiday
         start        end
 1: 2010-11-25 2010-12-31
 2: 2011-11-24 2011-12-31
 3: 2012-11-22 2012-12-31
 4: 2013-11-28 2013-12-31
 5: 2014-11-27 2014-12-31
 6: 2015-11-26 2015-12-31
 7: 2016-11-24 2016-12-31
 8: 2017-11-23 2017-12-31
 9: 2018-11-22 2018-12-31
10: 2019-11-28 2019-12-31
11: 2020-11-26 2020-12-31

我仍然需要弄清楚如何添加其他范围(例如,情人节或母亲节之前的两周),并且在/我知道时会更新此答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM