从日期列创建假期的指示变量

Reg*_*rts 5 variables r dataframe

如果这是一个简单的问题,我仍然是一个傻瓜新手,请原谅我,但我无法在stackoverflow上找到答案.我想为每个主要的美国假期创建一组指标变量,只需将一个函数应用到我的日期字段,该函数可以检测哪些天是假日,然后我可以将Model.matrix等转换为一组指标变量.
例如,我有从2012年1月1日到2013年9月15日的每日数据,我想为复活节创建一个变量指标.

我目前正在使用该timeDate软件包将一年时间用于其功能Easter()以查找日期.然后,我将日期键入以下代码以创建指示符变量.

Easter(2012)
EasterInd2012<-as.numeric(DATASET$Date=="2012-04-08")
Run Code Online (Sandbox Code Playgroud)

And*_*rew 10

获得一般假期指标变量的最简单方法是创建您感兴趣的所有假期的向量,然后在数据框中匹配这些日期.这样的事情应该有效:

library(timeDate)

# Sample data
Date <- seq(as.Date("2012-01-01"), as.Date("2013-09-15"), by="1 day")
DATASET <- data.frame(rnorm(624), Date)

# Vector of holidays
holidays <- c(as.Date("2012-01-01"), 
              as.Date(Easter(2013)),
              as.Date("2012-12-25"),
              as.Date("2012-12-31"))

# 1 if holiday, 0 if not. Could also be a factor, like c("Yes", "No")
DATASET$holiday <- ifelse(DATASET$Date %in% holidays, 1, 0)
Run Code Online (Sandbox Code Playgroud)

您可以手动输入日期,也可以使用一些timeDate内置的假日功能(该listHolidays()功能显示所有这些功能).所以你也可以holidays像这样构建:

holidays <- c(as.Date("2012-01-01"), 
              as.Date(Easter(2013)),
              as.Date(USLaborDay(2012)),
              as.Date(USThanksgivingDay(2012)),
              as.Date(USMemorialDay(2012)),
              as.Date("2012-12-25"),
              as.Date("2012-12-31"))
Run Code Online (Sandbox Code Playgroud)

要获得每个假期的具体指标,您需要一次执行一个:

EasterInd2012 <- ifelse(DATASET$Date==as.Date(Easter(2012)), 1, 0)
LaborDay2012 <- ifelse(DATASET$Date==as.Date(UsLaborDay(2012)), 1, 0)
# etc.
Run Code Online (Sandbox Code Playgroud)