#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 |