У меня есть датафрейм, который записывает, если человек принимал определенное лекарство каждый год:
df_og <- data.frame(
id=c(1,1,1,2,2,2,3,3,3,3),
year=c(2001,2002,2003,2001,2002,2003,2000,2001,2002,2003),
med1=c(1,1,1,1,1,0,0,0,0,1),
med2=c(0,0,0,0,0,1,0,0,1,0),
med3=c(0,0,0,0,0,0,1,1,0,0)
)
, который выглядит следующим образом:
id year med1 med2 med3
1 2001 1 0 0
1 2002 1 0 0
1 2003 1 0 0
2 2001 1 0 0
2 2002 1 0 0
2 2003 0 1 0
3 2000 0 0 1
3 2001 0 0 1
3 2002 0 1 0
3 2003 1 0 0
Итак, столбец id
показывает идентификатор субъект, year
год наблюдения, и переменные med1-2-3
являются фиктивными со значением = 1, если препарат был принят, и = 0, если нет.
Я пытаюсь создать новый фрейм данных :
id = c(1,2,2,3,3,3),
time = c(3,2,1,2,1,1),
failure = c(0,1,0,1,1,0),
group = c(1,1,2,3,2,1))
выглядит следующим образом:
id time failure med_group
1 3 0 1
2 2 1 1
2 1 0 2
3 2 1 3
3 1 1 2
3 1 0 1
где: id
показывает идентификатор субъекта, time
подсчитывает количество последовательных лет, когда субъект принимал определенное лекарство, failure
если в указанные годы субъект сменил препарат, med_group
препарат, который субъект принимал.
Примеры:
- первый ряд
df
, субъект id=1
принимает med1
в течение 3 лет подряд, поэтому time=3
и не переключается на других, поэтому failure=0
. - второй ряд
df
, id=2
принимает med1
2 года подряд, поэтому time=2
, failure=0
, med_group=1
. Но затем переключился на med2
, так что time=1
, failure=1
и med_group=2
.
и так далее для остальных. Это сложная операция, поэтому я надеюсь, что вопрос достаточно ясен.
Любое предложение будет приветствоваться! Приветствия