【发布时间】:2021-11-26 23:02:48
【问题描述】:
我有一个数据集,其中包含连续的“事件”日期向量。我想在每个事件之前和之后为给定长度的窗口创建一个编号的窗口变量。我有一个可以工作的代码,但速度慢得离谱,我想知道提高其效率的最佳方法。
下面我放了代码。我还有一个函数 create_date_vector,它只保留足够分开的日期,以便在窗口中没有重叠,这更使得下面的示例运行(但显然也欢迎对此进行改进)。
data <- data.frame(day = seq(as.Date("2000-01-01"), as.Date("2001-01-01"), by = "day"))
dates <- sample(seq(as.Date("2000-01-01"), as.Date("2001-01-01"), by = "day"), 30)
pre <- 3
post <- 3
create_date_vector <- function(dates, pre, post){
t_dates_dif <- diff(dates)
selected_dates <- c()
for(i in 1:(length(t_dates_dif) - 1)){
selected_dates <- c(selected_dates, (t_dates_dif[i] > pre + post) + (t_dates_dif[i+1] > pre + post))
}
return(dates[which(selected_dates == 2) + 1])
}
dates_chosen <- sort(create_date_vector(dates, pre, post))
真正需要优化的是以下创建窗口的代码:
data$event <- NA
for(i in 1:length(dates_chosen)){
data <- data %>%
mutate(
event = ifelse(day >= dates_chosen[i] - pre & day <= dates_chosen[i] + post, i, event)
)
}
感谢您的帮助。
【问题讨论】:
标签: r data.table tidyverse