假设你有
dfTransactionData
(dfTransactionData$instantId
)并且您希望将列intervalId
添加到大数据框中,该数据框将每个行/事务分配到它发生的间隔。
下面你可以看到我的临时解决方案正常工作,但速度很慢。我真的很感激能够更快地解决这个问题。
library("lubridate")
config <- new.env(parent = emptyenv())
config$intervals <- list(
"v4" = interval(ymd_hms("2001-01-01 00:00:00"), ymd_hms("2003-06-01 23:09:40.165365+02")),
"v5" = interval(ymd_hms("2003-06-01 23:09:40.165366+02"), ymd_hms("2004-02-27 11:48:41.065424+01")),
"v6" = interval(ymd_hms("2004-02-27 11:48:41.065425+01"), ymd_hms("2015-06-25 20:36:49.069505+02"))
)
dfTransactionData <- data.frame(instantId = format(seq(from=as.Date('2001-01-01 00:00:00', format="%Y-%m-%d %H:%M:%S"), by='day', length.out=10000 ), format="%Y-%m-%d %H:%M:%S"))
TimesplitTransactionData <- function(dfTransactionData) {
intervals <- config$intervals
intervalIds <- names(config$intervals)
intervalSeq <- seq_along(intervals)
dfTransactionData$intervalId <- apply(dfTransactionData,1,function(row) {
for (i in intervalSeq) {
if (fast_strptime(row["instantId"], "%Y-%m-%d %H:%M:%S") %within% intervals[[i]]) {
return(intervalIds[i])
}
}
return(NA)
})
return(dfTransactionData)
}
TimesplitTransactionData(dfTransactionData)