【问题标题】:Detect overlapping dates by group with R使用 R 按组检测重叠日期
【发布时间】:2020-04-20 22:31:22
【问题描述】:

给定一个数据集

structure(list(intervention = c("Self Isolation", "Lockdown Low", 
"Lockdown Low", "Self Isolation", "Social Distancing", "Lockdown Low", 
"Social Distancing", "Handwashing"), date_start = structure(c(17897, 
17957, 18444, 17987, 17897, 17532, 17942, 18018), class = "Date"), 
    date_end = structure(c(17956, 18262, 18475, 18017, 17956, 
    18053, 18017, 18048), class = "Date")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -8L))

如何检查任何“干预”是否有重叠日期? 在此示例中,所有干预措施都很好“保持社交距离”和“低锁定”

理想的输出将是一个数据框,每行一个干预,一列填充TRUE/FALSE,具体取决于干预是否有任何重叠。

(tidyverse 解决方案的加分项。)

【问题讨论】:

  • 您的预期输出是什么。是汇总输出还是创建列
  • 理想的输出将是一个数据框,每行一个干预,一列填充 TRUE/FALSE,具体取决于干预是否有任何重叠。
  • 如果您可以按照预期更新您的帖子,那就太好了
  • 完成,谢谢建议
  • 不清楚值,df1 %>% group_by(intervention) %>% summarise(flag = any(date_start >= lag(date_end, default = first(date_end))))

标签: r date


【解决方案1】:

我们可以做一个summarise

library(dplyr)
df1 %>%
    arrange(intervention, date_start, date_end) %>% 
    group_by(intervention) %>%
    summarise(overlapping = any(date_start < lag(date_end, 
         default = first(date_end)) & row_number() != 1))
# A tibble: 4 x 2
#  intervention      overlapping
#  <chr>             <lgl>      
#1 Handwashing       FALSE      
#2 Lockdown Low      TRUE       
#3 Self Isolation    FALSE      
#4 Social Distancing TRUE       

【讨论】:

  • 如果我在数据框末尾添加 Lockdown Low, 01/01/2018, 02/01/2019,则不会检测到 Lockdown Low 重叠
  • 我们如何解决这个问题?
  • @tic-toc-choc 抱歉,忘记检查了。你有更新的数据集
  • @tic-toc-choc 你能用新数据更新你的帖子,以便我可以测试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多