R - Увеличение переменной путем группировки переменных на основе изменения условий столбца - PullRequest
2 голосов
/ 17 апреля 2020

Я начинаю с «Старт»

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

и мне нужно перейти к «Фини sh».

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

Каждый идентификатор будет иметь несколько лабораторий в день в течение нескольких дней. Мне нужна новая переменная «День», которая отражает день, в который была составлена ​​лаборатория, увеличиваемая на 1 при каждом изменении даты и сбрасывающая день на «1» при изменении идентификатора пациента.

Создано в 2020-04-16 пакетом Представление (v0.3.0)

1 Ответ

0 голосов
/ 17 апреля 2020

Мы можем использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...