линейная спинная интерполяция временных рядов по группам - PullRequest
0 голосов
/ 16 января 2019

Я имею дело с временным рядом балансов тысяч перечисленных компаний за 1990-2018 годы. В некоторые годы у меня только годовой баланс, в то время как в другие годы у меня есть 5 балансов, в том числе 1 годовой и 4 квартальных баланса. Я пытаюсь использовать всю доступную информацию. Дата баланса всегда указывается в хххх-01-01 / хххх-03-31 / хххх-06-30 / хххх-09-30 / хххх-12-31. Я выбираю кодовый номер, дату, долгосрочную ответственность и краткосрочную ответственность. Я хочу сначала рассчитать сумму долгосрочного и краткосрочного обязательства в качестве нового столбца и выполнить линейную интерполяцию позвоночника нового столбца по номеру кода для каждого месяца. Дата указывается в форме месяца года.

code       date type           cl        ll       
 1   1990-12-31    A     56280000         0        
 1   1991-12-31    A     77230000         0        
 1   1992-12-31    A    195893200         0        
 1   1993-01-01    A            0         0        
 1   1994-06-30    A            0         0        
 1   1994-12-31    A            0         0        
 1   1996-12-31    A            0         0        
 2   1991-12-31    A    374334527   3500000   
 2   1992-12-31    A    688472115  19820785  
 2   1993-12-31    A   1135584690  70268722  
 2   1994-12-31    A   1442120726  85175588  
 2   1995-06-30    A   1571620470         0 

Я знаю, как это сделать, когда интервал времени постоянен, используя splinefun и na.approx. Но я понятия не имею, как бороться с непостоянными интервалами времени. Спасибо!

1 Ответ

0 голосов
/ 17 января 2019

Я только что получил желаемый результат.Идея из аналогичного вопроса https://stackoverflow.com/a/31383995/10714457.Стоит отметить, что столбец месяца находится в символьной форме.Мне нужно as.numeric(month), чтобы сначала преобразовать их в числовые.

 DF$month <- format(as.Date(DF$date), "%m")
 DF$year <- format(as.Date(DF$date), "%Y")
 res <- setDT(DF)[, .SD[match(1:12, as.numeric(month))], by = .(year, code)]
 cols <- c("ll", "cl", "ncl")
 Interpolation <- res[, (cols) := 
 lapply(.SD, na.approx, na.rm = FALSE), .SDcols = cols]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...