【发布时间】:2016-12-13 19:54:17
【问题描述】:
我已经看到了解决此问题的方法,但无法使其适用于团体 (Fill NA in a time series only to a limited number),并认为必须有一种更简洁的方法来做到这一点?
假设我有以下 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 值向前和向后填充NAs both,但最多只能向前或向后两行返回。
我还需要按组(ID)来完成。
我曾尝试使用na.locf/na.approx 和maxgap = x 等,但它不能填补NAs,非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
实际上,我的数据集非常庞大,我希望能够按组向前和向后填充 NAs 最多 672 行,但不会更多。
谢谢!
【问题讨论】:
标签: r data.table na