【问题标题】:R: Remove rows that satisfy condition based on time frameR:根据时间范围删除满足条件的行
【发布时间】:2019-06-24 02:36:52
【问题描述】:

我有 1000 个主题的数据,每个 ID 都有多行。以下是我数据中个人的摘录:

    ID      servicedate   firstdate     group      firstdateplus90
    AAA     01/01/2019    01/01/2019    A          04/01/2019
    AAA     03/01/2019    01/01/2019    B          04/01/2019

我想删除所有主题,例如 AAA,在自日期 1 起的 90 天时间范围内,它们有一行表明它们在不同的组中。在上面的示例中,受试者 AAA 从 A 组开始,但到 2019 年 3 月 1 日,也就是 04/01/2019 之前(自日期 1 起 90 天),他们在 B 组。

我首先尝试创建一个新变量,告诉我们主题在第一次约会时所在的组:

mydata <- mydata %>% group_by(ID) %>%
mutate(first_group= {if(firstdate == servicedate) group[min(which(firstdate == servicedate))] else NA})

但我不确定从这里去哪里,或者是否有一种更简单的方法可以将那些在 firstdateplus90 中的组不等于 firstdate 的组进行子集化。

感谢任何帮助!

【问题讨论】:

    标签: r time conditional-statements subset


    【解决方案1】:

    这对我有用:

    df <-  data.frame(ID = c("AAA","AAA", "AAA", "BBB", "BBB"),
               servicedate = as_date(c(17774, 17794, 17804, 17374, 17386)),
               group = c("A", "A", "B", "A", "A"))
    
        df %>%
          anti_join(df %>%
          group_by(ID) %>%
            filter(servicedate - min(servicedate) < 90 & group != group[servicedate == min(servicedate)]) %>%
     select(ID))
    

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 2021-12-23
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多