2013-10-02 29 views
4

我仍然是一個骨頭新手,所以請原諒我,如果這是一個簡單的問題,但我無法在stackoverflow上找到答案。我想爲每個主要的美國假期創建一組指標變量,只需在我的日期字段中應用一個函數,即可檢測哪些日子是假期,然後我們可以使用Model.matrix等。將其轉換爲集合的指標變量。
例如,我有2012年1月1日至2013年9月15日的每日數據,我想爲復活節創建一個變量指標。從日期列中創建假期的指示變量

我目前使用timeDate包將一年的功能Easter()查找日期。然後,我將這些日期輸入到下面的代碼中來創建一個指示變量。

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

回答

8

獲得公衆假期的指標變量最簡單的方法是創建你自己感興趣的節日的載體中,然後匹配您的數據幀的日期。像這樣的東西應該工作:

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. 
+0

謝謝謝謝 –

+0

你可能通過使用'apply'函數編寫一個循環來使特定指標的分配效率更高,但是之後您需要定義變量名稱和日期,這與一次一行地執行一樣多的工作。所以它不是最有效的,計算上的,但它的工作原理。 – Andrew

+1

你可以隨時接受這個答案,如果它工作:) – Andrew