R语言计算暴雪事件前后间隔天数及生成对应分类变量的方法
实现思路
- 首先提取数据中所有暴雪事件(
bliz == 1)的日期,存储为独立向量 - 逐行计算每条记录的日期与最近暴雪日期的天数差值,得到数值变量
num_days_after - 基于差值直接生成两个二分类标识变量:
day_before_blizzard:差值为-1时取值1,其余为03days_after:差值为1、2、3时取值1,其余为0
实现代码
library(dplyr) # 构造示例基础数据 d <- data.frame(date = seq(as.POSIXct("2018-12-01"), as.POSIXct("2019-01-31"), by="day")) d <- d %>% mutate(day = as.numeric(strftime(date, format = "%d")), bliz = ifelse(day == 13, 1, 0)) %>% select(-day) # 提取所有暴雪发生日期 bliz_dates <- d$date[d$bliz == 1] # 生成目标变量 d <- d %>% rowwise() %>% mutate( # 计算与最近暴雪的天数差,存在多场暴雪时自动匹配最近的一场 num_days_after = as.numeric(difftime(date, bliz_dates[which.min(abs(difftime(date, bliz_dates, units = "days")))], units = "days")), day_before_blizzard = as.integer(num_days_after == -1), `3days_after` = as.integer(num_days_after %in% 1:3) ) %>% ungroup() # 查看输出结果 head(d, n = 5)
补充说明
上述代码兼容多场暴雪的场景,无需因为暴雪事件增加修改计算逻辑。如果仅需要统计某一场特定暴雪的前后间隔,只需修改bliz_dates的筛选条件,指定对应暴雪的日期即可。
内容的提问来源于stack exchange,提问作者Wanner
相关产品推荐
相关产品推荐

