【问题标题】:R - Selecting Rows after a Certain Value in Data Frame is FoundR - 在数据框中找到某个值后选择行
【发布时间】:2021-07-18 06:46:41
【问题描述】:

我有一个数据框,其中包含药物、处方日期以及特定处方日期是否与预先确定为列的间隙相关联。第三列的值为真/假。我正在尝试创建一个函数,在找到第三列中为 true 的行后输出此数据帧的行。我只想要找到该特定值之后的行,不包括具有 true 的行。我该如何使用 R 来执行此操作?

示例表如下所示:

 Drug    Date        Gap between Consecutive Dates? 
 Drug 1  5-18-2011               false    
 Drug 1  6-18-2011               false    
 Drug 1  10-15-2012              true     
 Drug 1  11-15-2012              false    
 Drug 1  12-15-2012              false  
 Drug 1  8-04-2015               true
 Drug 1  9-04-2015               false
 Drug 1  10-04-2015              false

输出应如下所示:

Treatment Window     Drug        Start Date              End Date
      1             Drug 1        5-18-2011              6-18-2011              
      2             Drug 1        10-15-2012             12-15-2012 
      3             Drug 1        8-04-2015              10-04-2015  
 

我只想选择找到“以下”的行,并根据与特定药物相关的药物假期数为其分配治疗编号。在每个药物假期之后,治疗次数会增加,因为服用药物的人的治疗方案可能已经改变。如果语言中存在这样的方法,我该如何使用 R 获取此输出?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    取逻辑值TRUE/FALSE的累积和来创建组。按Drug 值分组并获取Date 的最大值和最小值以获取开始和结束日期。 Window 列是使用每个 Drug 的行号创建的。

    library(dplyr)
    
    df %>%
      mutate(group = cumsum(as.logical(Gap)), 
             Date = lubridate::mdy(Date)) %>%
      group_by(Drug, group) %>%
      summarise(Start_Date = min(Date), 
                End_date = max(Date)) %>%
      mutate(Window = row_number(), .before = 1) %>%
      ungroup %>%
      select(-group)
    
    #  Window Drug  Start_Date End_date  
    #   <int> <chr> <date>     <date>    
    #1      1 Drug1 2011-05-18 2011-06-18
    #2      2 Drug1 2012-10-15 2012-12-15
    #3      3 Drug1 2015-08-04 2015-10-04
    

    数据

    df <- structure(list(Drug = c("Drug1", "Drug1", "Drug1", "Drug1", "Drug1", 
    "Drug1", "Drug1", "Drug1"), Date = c("5-18-2011", "6-18-2011", 
    "10-15-2012", "11-15-2012", "12-15-2012", "8-04-2015", "9-04-2015", 
    "10-04-2015"), Gap = c("false", "false", "true", "false", "false", 
    "true", "false", "false")), class = "data.frame", row.names = c(NA, -8L))
    

    【讨论】:

      猜你喜欢
      • 2012-06-12
      • 1970-01-01
      • 2022-11-06
      • 1970-01-01
      • 2018-11-23
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      相关资源
      最近更新 更多