我正在处理1990-2018年数千家上市公司的资产负债表的时间序列。在某些年份,我只有年度资产负债表,而在另一些年份,我拥有5个资产负债表,其中包括1个年度资产负债表和4个季度资产负债表。我正在尝试使用所有可用信息。资产负债表的日期始终为xxxx-01-01 / xxxx-03-31 / xxxx-06-30 / xxxx-09-30 / xxxx-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在时间间隔恒定时执行此操作。但是我不知道如何处理非恒定时间间隔。谢谢!
答案 0 :(得分:0)
我刚得到了想要的结果。这个想法来自类似的问题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]