Я не знаю, поможет ли это вам. Похоже, что вы не записали возраст для каждой волны для каждого человека. То, что сказано здесь, является схемой подхода, предполагающего, что у вас есть только возраст после постановки диагноза.
library(tidyverse)
# Generate Sample Data
dat <- tibble(id = 1:50,
age_1 = rnorm(50, 50, 2)) %>%
mutate(
age_2 = age_1 + 5,
age_3 = age_2 + 5,
age_4 = age_3 + 5,
age_5 = age_4 + 5
) %>%
add_column(dementia = rbinom(50, 1, .1))
# Now get data in long format to do the calculations
dat_2 <- dat %>%
gather(wave, age, contains("age"))
dat_2 %>%
group_by(id, dementia) %>%
filter(dementia==1) %>% # Diagnoses
filter(age == min(age)) %>%
rename(age_at_diagnosis = age)# Age first appeared
Это предоставит вам следующее:
# A tibble: 5 x 4
# Groups: id, dementia [5]
id dementia wave age_at_diagnosis
<int> <int> <chr> <dbl>
1 7 1 age_1 52.3
2 13 1 age_1 50.6
3 24 1 age_1 50.8
4 34 1 age_1 52.5
5 35 1 age_1 50.3
Теоретически вы можете взять этот фрейм данных и затем присоединить его к умершему времени или с минимальным возрастом в наборе данных.
first_diagnosis <- dat_2 %>%
group_by(id, dementia) %>%
filter(dementia==1) %>% # Diagnoses
filter(age == min(age)) %>%
ungroup() %>%
rename(age_at_diagnosis = age)# Age first appeared
age_first_age <- dat_2 %>%
group_by(id, dementia) %>%
filter(age == min(age)) # Age first appeared
age_first_age %>%
left_join(first_diagnosis %>%
select(id, age_at_diagnosis), by = "id") %>%
mutate(time_to_event = age_at_diagnosis - age)
Что даст вам что-то похожее на это:
# A tibble: 50 x 6
# Groups: id, dementia [50]
id dementia wave age age_at_diagnosis time_to_event
<int> <int> <chr> <dbl> <dbl> <dbl>
1 1 0 age_1 45.8 NA NA
2 2 0 age_1 46.7 NA NA
3 3 0 age_1 49.0 NA NA
4 4 0 age_1 53.4 NA NA
5 5 0 age_1 47.4 NA NA
6 6 0 age_1 49.1 NA NA
7 7 1 age_1 52.3 52.3 0
8 8 0 age_1 49.6 NA NA
9 9 0 age_1 52.1 NA NA
10 10 0 age_1 54.4 NA NA