我在R工作。我有一个日期序列,我想指定每个特定日期是学期时间还是学校假期。我计划使用数据框列来执行此操作,其中每行标记为"假日"或"术语"
我的方法是创建一个时间序列,并使用向量单独指定每个假日日期;第一个元素是假日的开始日期,第二个元素是假日的结束。
然后我创建一个if-or语句来测试时间是否在向量中指定的任何假日日期之内。
到目前为止,这是我的代码:
phd_thesis.non_linear_features_selection
正如您所看到的,此代码不起作用,只需将所有行标记为" Term"。
因此我想知道以下内容:
如何在假日向量中指定日期范围,以便在if语句中使用?
这是否是最好的使用方法?我是R的新手,我正在考虑替代方案,例如为术语和假期创建一组单独的序列,然后将它们拼接在一起。然而,这种方法似乎很繁琐,但会很感激你的想法。
感谢您的帮助。
答案 0 :(得分:1)
类似于避免if-else
的方法。
# Or alternatively by="mins"
DateSeq <- seq(from=start, to=end, by="hours")
date_table <- data.frame(Time = DateSeq)
# Put all holidays together
H<-rbind(H1,H2,H3,H4)
# Or alternatively set to "Term"
date_table$Holiday<-0
# Assign all the holidays
for (i in 1:nrow(H)){
date_table[date_table$Time > H[i,1] & date_table$Time < H[i,2],"Holiday"]<-1 # or "Holiday"
}
# Check they are correctly assign
plot(date_table)
答案 1 :(得分:0)
您可以使用cut()
将DateSeq剪切为期限和假期。
res <- cut(DateSeq, breaks = as.POSIXlt( c(H1, H2, H3, H4), format = "%Y-%m-%d"), labels = c("October", "term1", "Christmas", "term2", "Feb", "Term3", "Easter"))
table(res)