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

标签 r variables dataframe

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

我目前正在使用 timeDate包传递一年给他们的函数 Easter()找到日期。然后我将日期输入到以下代码中以创建指示变量。

Easter(2012)
EasterInd2012<-as.numeric(DATASET$Date=="2012-04-08")

最佳答案

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

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)

您可以手动输入日期,也可以使用 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"))

要获取每个假期的特定指标,您需要一次执行一项:
EasterInd2012 <- ifelse(DATASET$Date==as.Date(Easter(2012)), 1, 0)
LaborDay2012 <- ifelse(DATASET$Date==as.Date(UsLaborDay(2012)), 1, 0)
# etc.

关于r - 从日期列创建假期的指示变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19138309/

相关文章:

r - 传播多列 [tidyr]

将数据从长格式重新格式化为宽格式

ruby-on-rails - 在什么情况下我应该使用实例变量而不是其他变量类型?

variables - 局部变量在栈上的顺序是什么?

python - 需要匹配 2 个不同 pandas 数据框的 2 列(如果匹配),我们需要附加新数据

r - 如何在R中的列中查找非分数值的出现?

r - 如何绘制大量具有不同分类变量的密度图

c - C 中的函数总是返回相同的任意数字

pandas - 过滤后取消堆叠 MultiIndex pandas 数据帧时出现越界错误

python - 将字典转换为 Python 数据框