在大型数据框中查找哪一天是假期 - 巨大的运行时间

Finding which day is a holiday in a large dataframe - HUGE runtime

我有一个包含一年中所有假期的 csv 文件,它是 "FILE A"。我还有一个很大的 csv 文件,里面有一些数据,其中有一列包含 POSIXlt class 中的日期。最后一个是"FILE B"

问题是,如何查看文件 B 中的哪些日期是假期?环境我整理一下,大家看得懂:

假设对象holidays包含一年中所有的假期 并假设 df 是包含一堆东西的数据框。但是,datesdf 包含该事件发生的日期

我解决问题的方法是使用以下函数和代码

b <- df$dates
z <- lapply(b, isHoliday)

isHoliday 实现为:

isHoliday<- function(var){
return ( any(holidays ==  as.Date(var))  )  #remember: var is on POSIXlt
}

如果 df$dates 的元素数量很少,这会起作用。但是,我的 df 有近 300 万行。并且,15 分钟后,没有 return。

因此,我再问一次

如何查看哪些日期是假期?

不要使用 lapply - 你本质上想要:

as.Date(b) %in% holidays

虽然 lapply 将遍历 b 和 运行 as.Dateany length(b) 的每个值,但此代码将运行 as.Date 一次,然后使用 %in%.

在矢量化编译代码中进行所有比较

使用 == 也是不正确的,因为左侧会被回收。例如:

1:2 == c(1:2,2:1)
#[1]  TRUE  TRUE FALSE FALSE