在大型数据框中查找哪一天是假期 - 巨大的运行时间
Finding which day is a holiday in a large dataframe - HUGE runtime
我有一个包含一年中所有假期的 csv 文件,它是 "FILE A"。我还有一个很大的 csv 文件,里面有一些数据,其中有一列包含 POSIXlt class 中的日期。最后一个是"FILE B"
问题是,如何查看文件 B 中的哪些日期是假期?环境我整理一下,大家看得懂:
假设对象holidays包含一年中所有的假期
并假设 df 是包含一堆东西的数据框。但是,dates 列 df 包含该事件发生的日期
我解决问题的方法是使用以下函数和代码
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.Date
和 any
length(b)
的每个值,但此代码将运行 as.Date
一次,然后使用 %in%
.
在矢量化编译代码中进行所有比较
使用 ==
也是不正确的,因为左侧会被回收。例如:
1:2 == c(1:2,2:1)
#[1] TRUE TRUE FALSE FALSE
我有一个包含一年中所有假期的 csv 文件,它是 "FILE A"。我还有一个很大的 csv 文件,里面有一些数据,其中有一列包含 POSIXlt class 中的日期。最后一个是"FILE B"
问题是,如何查看文件 B 中的哪些日期是假期?环境我整理一下,大家看得懂:
假设对象holidays包含一年中所有的假期 并假设 df 是包含一堆东西的数据框。但是,dates 列 df 包含该事件发生的日期
我解决问题的方法是使用以下函数和代码
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.Date
和 any
length(b)
的每个值,但此代码将运行 as.Date
一次,然后使用 %in%
.
使用 ==
也是不正确的,因为左侧会被回收。例如:
1:2 == c(1:2,2:1)
#[1] TRUE TRUE FALSE FALSE