【问题标题】:R - Incrementing variable by grouping variables, based on changing column conditionsR - 根据不断变化的列条件,通过对变量进行分组来增加变量
【发布时间】:2020-04-16 21:17:12
【问题描述】:

我从“开始”开始

ID <- c("A", "A", "A", "B", "B", "C")
Lab <- c("5", "10", "15", "20", "5", "10")
Date <- as.Date(c("01/01/2020",
          "01/01/2020",
          "01/02/2020",
          "01/01/2020",
          "01/02/2020",
          "01/05/2020"), format="%m/%d/%Y")
Start <- data.frame(ID, Lab, Date)
Start
#>   ID Lab       Date
#> 1  A   5 2020-01-01
#> 2  A  10 2020-01-01
#> 3  A  15 2020-01-02
#> 4  B  20 2020-01-01
#> 5  B   5 2020-01-02
#> 6  C  10 2020-01-05

并且需要到达“完成”。

Day <- c(1, 1, 2, 1, 2, 1)
Finish <- data.frame(ID, Lab, Date, Day)
Finish
#>   ID Lab       Date Day
#> 1  A   5 2020-01-01   1
#> 2  A  10 2020-01-01   1
#> 3  A  15 2020-01-02   2
#> 4  B  20 2020-01-01   1
#> 5  B   5 2020-01-02   2
#> 6  C  10 2020-01-05   1

每个 ID 每天都会有多个实验室,跨越几天。我需要一个新变量“Day”,它反映绘制实验室的日期,每次日期更改时递增 1,并在患者 ID 更改时将日期重置为“1”。

reprex package (v0.3.0) 于 2020 年 4 月 16 日创建

【问题讨论】:

  • 我重新打开它是因为 link 似乎没有回答问题

标签: r


【解决方案1】:

我们可以在逻辑向量上使用cumsum,在按“ID”分组后创建“日”

library(dplyr)
Start %>% 
      group_by(ID) %>% 
      mutate(Day = cumsum(!duplicated(Date)))
# A tibble: 6 x 4
# Groups:   ID [3]
#  ID    Lab   Date         Day
#  <fct> <fct> <date>     <int>
#1 A     5     2020-01-01     1
#2 A     10    2020-01-01     1
#3 A     15    2020-01-02     2
#4 B     20    2020-01-01     1
#5 B     5     2020-01-02     2
#6 C     10    2020-01-05     1

【讨论】:

  • 好交易!我搜索了一下,发现了多个死胡同,因为我没有看到这种特殊情况。非常感谢您的快速解决方案。效果很好。
猜你喜欢
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 2021-09-26
  • 2018-07-18
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 2019-09-03
相关资源
最近更新 更多