Используя данные, воспроизводимые в примечании в конце, я не получаю никаких сообщений об ошибках:
library(data.table)
library(zoo)
test3[, na.locf(test3, na.rm = FALSE, fromLast = FALSE, maxgap = Inf), by = "gvkey"]
давая это без ошибок, хотя это не желаемый ответ.
gvkey date gvkey dlcq dlttq
1: gvkey1 date1 gvkey1 10 20
2: gvkey1 date2 gvkey1 10 20
3: gvkey1 date3 gvkey1 10 10
4: gvkey1 date10 gvkey2 10 10
5: gvkey1 date11 gvkey2 10 10
6: gvkey1 date12 gvkey2 10 10
7: gvkey2 date1 gvkey1 10 20
8: gvkey2 date2 gvkey1 10 20
9: gvkey2 date3 gvkey1 10 10
10: gvkey2 date10 gvkey2 10 10
11: gvkey2 date11 gvkey2 10 10
12: gvkey2 date12 gvkey2 10 10
Проблема в том, что правильный способ обращения к test3
в пределах test3
заключается в использовании .SD
следующим образом:
test3[, na.locf(.SD, na.rm = FALSE, fromLast = FALSE, maxgap = Inf), by = "gvkey"]
дает:
gvkey date dlcq dlttq
1: gvkey1 date1 10 20
2: gvkey1 date2 10 20
3: gvkey1 date3 10 10
4: gvkey2 date10 NA NA
5: gvkey2 date11 10 NA
6: gvkey2 date12 10 NA
Примечание
Lines <- "
date | gvkey | dlcq | dlttq
date1 | gvkey1 | 10 | 20
date2 | gvkey1 | NA | NA
date3 | gvkey1 | NA | 10
date10 | gvkey2 | NA | NA
date11 | gvkey2 | 10 | NA
date12 | gvkey2 | NA | NA"
library(data.table)
test3 <- fread(Lines)