Я видел решение этого, но не могу заставить его работать для групп (Fill NA in a time series only to a limited number) и думал, что там должно быть аккуратно способ сделать это также?na.locf заполнить NAs до maxgap, даже если зазор> maxgap, с группами
Скажем, у меня есть следующий DT:
dt <- data.table(ID = c(rep("A", 10), rep("B", 10)), Price = c(seq(1, 10, 1), seq(11, 20, 1)))
dt[c(1:2, 5:10), 2] <- NA
dt[c(11:13, 15:19) ,2] <- NA
dt
ID Price
1: A NA
2: A NA
3: A 3
4: A 4
5: A NA
6: A NA
7: A NA
8: A NA
9: A NA
10: A NA
11: B NA
12: B NA
13: B NA
14: B 14
15: B NA
16: B NA
17: B NA
18: B NA
19: B NA
20: B 20
То, что я хотел бы сделать, это заполнить NA
s как вперед и назад от последнего значения не- NA
, но только до максимум две строки вперед или назад.
Мне также нужно, чтобы это выполнялось группой (ID).
Я попытался с помощью na.locf
/na.approx
с maxgap = x
и т.д., но не заполняет NA
S, где разрыв между не- NA
значений больше, чем maxgap
. В то время как я хочу заполнить их вперед и назад, даже если зазор между значениями не NA
больше, чем maxgap
, но только двумя строками.
Конечный результат должен выглядеть примерно так:
ID Price Price_Fill
1: A NA 3
2: A NA 3
3: A 3 3
4: A 4 4
5: A NA 4
6: A NA 4
7: A NA NA
8: A NA NA
9: A NA NA
10: A NA NA
11: B NA NA
12: B NA 14
13: B NA 14
14: B 14 14
15: B NA 14
16: B NA 14
17: B NA NA
18: B NA 20
19: B NA 20
20: B 20 20
В действительности, мой набор данных не является массовым, и я хочу, чтобы иметь возможность заполнить NA
S вперед и назад до 672 строк, но не более , по группам.
Спасибо!
Сохраненный меня снова @akrun. Благодаря! – LyssBucks