R语言:为数据框新增自另一表上次AC事件后的天数字段
R实现代码
你可以用tidyverse套件快速实现该需求,步骤如下:
步骤1:预处理AC事件日期表
首先对AC事件表去重,仅保留每个公园的有效AC事件日期:
library(tidyverse) # 提取每个公园的所有AC事件日期,同一天重复AC事件去重 ac_clean <- Reaction_per_park_per_day_3 %>% select(Park, ac_date = Date) %>% distinct()
步骤2:关联两个表并计算间隔天数
通过公园字段关联两张表,筛选每个上报记录对应的有效历史AC事件,计算最近间隔:
final_result <- All_reports_per_month2 %>% # 同公园的上报记录匹配所有该公园的AC日期 left_join(ac_clean, by = "Park", relationship = "many-to-many") %>% # 按原上报记录的唯一标识分组 group_by(Month, Park, Code, Reports_per_month) %>% summarise( Days_since_last_AC = { # 筛选早于等于上报日期的AC事件 valid_ac <- ac_date[ac_date <= Month] # 无有效AC事件返回NA,否则计算间隔天数 if(length(valid_ac) == 0) NA_integer_ else as.integer(Month - max(valid_ac)) }, .groups = "drop" )
运行上述代码后final_result就是你需要的输出结果,和你给出的预期示例完全匹配。如果你的数据量超过10万行,也可以用data.table实现更高效率的计算,核心逻辑和上述一致。
内容的提问来源于stack exchange,提问作者Gab_Laj
相关产品推荐
相关产品推荐

