Tôi đã xem giải pháp cho điều này, nhưng không thể làm cho nó hoạt động cho các nhóm (Fill NA in a time series only to a limited number), và nghĩ rằng phải có một bộ lặp cách để làm điều này cũng?na.locf điền NA vào tối đa ngay cả khi khoảng cách> maxgap, với các nhóm
Nói rằng tôi có dt sau:
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
Những gì tôi muốn làm, là để lấp đầy NA
s cả về phía trước và trở lại từ giá trị phi NA
gần đây nhất, nhưng chỉ lên đến một tối đa hai hàng về phía trước hoặc sau.
Tôi cũng cần nó được thực hiện theo nhóm (ID).
Tôi đã cố gắng sử dụng na.locf
/na.approx
với maxgap = x
vv, nhưng nó không điền NA
là nơi khoảng cách giữa NA
giá trị không lớn hơn maxgap
. Trong khi đó, tôi muốn lấp đầy những chuyển tiếp này và ngược lại ngay cả khi khoảng cách giữa các giá trị không phải là NA
lớn hơn maxgap
, nhưng chỉ bằng hai hàng.
Kết quả cuối cùng nên trông giống như sau:
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
Trên thực tế, tập hợp dữ liệu của tôi là lớn, và tôi muốn để có thể lấp đầy NA
s về phía trước và trở lại lên đến 672 dòng, nhưng không nhiều , theo nhóm.
Cảm ơn!
lưu tôi một lần nữa @akrun. Cảm ơn! – LyssBucks