Позвольте мне углубиться. Представьте, что у вас есть данные, которые выглядят так:
df <- data.frame(one = c(1, 1, NA, 13),
two = c(2, NA,10, 14),
three = c(NA,NA,11, NA),
four = c(4, 9, 12, NA))
Это дает нам:
df
# one two three four
# 1 1 2 NA 4
# 2 1 NA NA 9
# 3 NA 10 11 12
# 4 13 14 NA NA
Каждая строка представляет собой измерения в неделю 1, 2, 3 и 4 соответственно. Предположим, что числа представляют собой некоторую накопленную меру с момента последнего измерения. Например, в строке 1 "4" в столбце "четыре" представляет собой кумулятивное значение недели 3 и 4.
Теперь я хочу "выровнять" эти числа (не стесняйтесь исправить мою терминологию здесь), равномерно распределяя измерения на все недели до измерения, если в предшествующие недели измерения не проводились. Например, строка 1 должна читать
1 2 2 2
так как 4 в исходных данных представляет собой совокупное значение 2 недели (неделя "три" и "четыре" ), а 4/2 равно 2.
Конечный конечный результат должен выглядеть следующим образом:
df
# one two three four
# 1 1 2 2 2
# 2 1 3 3 3
# 3 5 5 11 12
# 4 13 14 NA NA
Я немного борюсь с тем, как наилучшим образом подойти к этому. Одним из возможных вариантов решения было бы получить индексы всех отсутствующих значений, затем подсчитать длину прогонов (НС, возникающих несколько раз), и использовать это, чтобы каким-то образом заполнить значения. Однако мои реальные данные велики, и я думаю, что такая стратегия может занять много времени. Есть ли более простой и эффективный способ?