Мера продолжительности. Количество времени (количество столбцов), которое проходит от первой когорты до начала следующей когорты

#r #dataframe #loops #for-loop #datatable

Вопрос:

У меня есть следующая структура данных с ежемесячными наблюдениями за n особями.

 df <- structure(list(
  ID = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"   ),
  Gender = c("M","M","F","M","F","F","F","M","F","F"),
  y_0101 = c(0,2,0,0,0,3,0,0,0,3),
  y_0102 = c(6,2,0,0,2,0,2,0,6,0),
  y_0103 = c(0,0,1,0,0,0,0,4,0,0),
  y_0104 = c(0,0,0,2,0,3,0,2,0,2),
  y_0105 = c(2,2,1,4,5,3,4,0,5,2),
  y_0106 = c(2,2,1,4,5,5,6,4,3,0),
  y_0107 = c(2,2,1,4,0,0,6,0,0,4),
  y_0108 = c(0,0,0,1,0,0,7,0,2,8),
  y_0109 = c(2,8,0,0,0,0,0,3,0,0),
  y_0110 = c(2,0,0,2,2,0,0,0,0,4),
  y_0111 = c(0,0,0,0,0,0,0,0,0,0),
  y_0112 = c(0,0,0,0,0,2,0,0,0,0)),
  class = "data.frame", row.names = c(NA, -10L))
df
 

Я хочу для каждой строки создать меру, которая вычисляет количество времени (# столбцов), которое проходит от первой когорты нулей (может быть другое значение, например «NA» или «больной»), до начала следующего периода когорты в зависимости от некоторых условий.
Это должно быть сделано в пределах определенного интервала столбцов (y_0101:y_0112).

Эти суммы периодов должны применяться, когда выполняются два следующих условия:

Первое условие: Первый интервал из 0 должен быть >= 2, прежде чем считаться отправной точкой.

Второе условие: следующая когорта 0-х должна быть >=2.

Суммы столбцов между когортами будут добавлены в виде нового столбца (название: «Разница»).

Третье условие: Если интервалов больше одного, то это должно быть добавлено в качестве нового столбца (имя: «Diff_2») и так далее. Если не более одного интервала, то NA.

Итак, в итоге все выглядит следующим образом:

ID Пол y_0101 y_0102 y_0103 y_0104 y_0105 y_0106 y_0107 y_0108 y_0109 y_0110 y_0111 y_0112 Diff Diff_2
A M 0 6 0 0 2 2 2 0 2 2 0 0 6 NA
B M 2 2 0 0 2 2 2 0 8 0 0 0 5 NA
C F 0 0 1 0 1 1 1 0 0 0 0 0 5 NA
D M 0 0 0 2 4 4 4 1 0 2 0 0 7 NA
E F 0 2 0 0 5 5 0 0 0 2 0 0 2 2
F F 3 0 0 3 3 5 0 0 0 0 0 2 3 NA
G F 0 2 0 0 4 6 6 7 0 0 0 0 4 NA
H M 0 0 4 2 0 4 0 0 3 0 0 0 4 1
Я F 0 6 0 0 5 3 0 2 0 0 0 0 4 NA
J F 3 0 0 2 2 0 4 8 0 4 0 0 7 NA