R在POSIXlt日期序列中标记多个日期

时间:2016-04-05 16:36:39

标签: r date posixct

我在R工作。我有一个日期序列,我想指定每个特定日期是学期时间还是学校假期。我计划使用数据框列来执行此操作,其中每行标记为"假日"或"术语"

我的方法是创建一个时间序列,并使用向量单独指定每个假日日期;第一个元素是假日的开始日期,第二个元素是假日的结束。

然后我创建一个if-or语句来测试时间是否在向量中指定的任何假日日期之内。

到目前为止,这是我的代码:

phd_thesis.non_linear_features_selection

正如您所看到的,此代码不起作用,只需将所有行标记为" Term"。

因此我想知道以下内容:

  1. 如何在假日向量中指定日期范围,以便在if语句中使用?

  2. 这是否是最好的使用方法?我是R的新手,我正在考虑替代方案,例如为术语和假期创建一组单独的序列,然后将它们拼接在一起。然而,这种方法似乎很繁琐,但会很感激你的想法。

  3. 感谢您的帮助。

2 个答案:

答案 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)