Используя dplyr, вы должны сгруппировать по id, а затем изменить его, чтобы добавить новый столбец следующим образом.
library(tidyverse)
# example data frame (always dput a simple piece of your data)
df <- structure(list(patient_id = c(1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L,
2L, 2L), date = structure(c(17600, 17601, 17602, 17603, 17604,
17605, 17606, 17607, 17608, 17609), class = "Date")), class = "data.frame",
row.names = c(NA, -10L))
Ключ заключается в том, чтобы сохранить вашу переменную даты как объект даты в вашем фрейме данных, таким образомВы можете сделать арифметику с этим.Для преобразования вашей переменной даты вы можете использовать функцию as_date
из пакета lubridate
.
df %>%
group_by(patient_id) %>% # group by patient
mutate(days_since_first_time = date - min(date)) %>%
arrange(patient_id, date)
# this is the output
patient_id date days_since_first_time
1 2018-03-10 0
1 2018-03-14 4
1 2018-03-18 8
2 2018-03-11 0
2 2018-03-12 1
2 2018-03-13 2
2 2018-03-15 4
2 2018-03-16 5
2 2018-03-17 6
2 2018-03-19 8