【问题标题】:Create indicator variables of holidays from a date column从日期列创建假期的指标变量
【发布时间】:2013-10-02 13:40:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: r variables dataframe


    【解决方案1】:

    获取一般假期指示变量的最简单方法是创建一个包含您感兴趣的所有假期的向量,然后匹配数据框中的这些日期。像这样的东西应该可以工作:

    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.
    

    【讨论】:

    • 您可以通过使用apply 函数之一编写一个循环来提高特定指标的分配效率,但是您需要定义变量名称和日期,这同样重要像这样一次一行地工作。因此,从计算上讲,它不是最有效的,但它确实有效。
    猜你喜欢
    • 2012-03-19
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多