【发布时间】:2020-01-07 05:40:34
【问题描述】:
我正在尝试将年度公司数据添加到月度数据中。由于年度数据是在特定月份报告的,并不总是每 12 个月更新一次,因此我需要年度值与月度数据集中的月份相匹配,然后将它们延续到该特定公司的下一个可用数据点(如果有的话)。
该数据集包含数千家具有唯一 ID 的公司,这些公司通常不会以相同的年度模式进行报告。随后的两个 ReportMonth 不必在同一个月份。此外,可能有几年我没有 ReportMonth,因此没有那一年的年度数据。
我确保在我有一些年度数据的每个月中,整行年度变量永远不会是 NA。下面是一个结构示例,以及我现在遇到的问题。
id Date MonVariable ReportMonth AnnVariable
1 ABCDEFG 1999-02 1 <NA> <NA>
2 ABCDEFG 1999-01 2 <NA> <NA>
3 ABCDEFG 1998-12 3 <NA> <NA>
4 HIJKLMN 2019-08 4 <NA> <NA>
5 HIJKLMN 2019-07 5 <NA> <NA>
6 HIJKLMN 2019-06 6 <NA> <NA>
7 HIJKLMN 2019-05 7 2019-05 101
8 HIJKLMN 2019-04 8 2018-06 113
我尝试对每个年度变量使用dplyr:group_by(id),然后使用zoo:na.locf(x, na.rm = F, fromLast = T, maxgap = 12)。
我最多可以将它们保留 12 个月,这可以在第 8 行中看到,其中年度变量来自大约一年前的报告日期。
但是有两个问题。第一个是从一家公司到另一家公司的中断前后,仍然缺少以下公司的最新值(第 4-6 行)。但是,我也想为它们提供最后一个可用的值,如下所示。
id Date MonVariable ReportMonth AnnVariable
1 ABCDEFG 1999-02 1 <NA> <NA>
2 ABCDEFG 1999-01 2 <NA> <NA>
3 ABCDEFG 1998-12 3 <NA> <NA>
4 HIJKLMN 2019-08 4 2019-05 101
5 HIJKLMN 2019-07 5 2019-05 101
6 HIJKLMN 2019-06 6 2019-05 101
7 HIJKLMN 2019-05 7 2019-05 101
8 HIJKLMN 2019-04 8 2018-06 113
我认为na.locf 直到休息才填补它们,因为公司的最后一个年度变量也经常丢失,因此最接近的 2 个值的行之间的“差距”大于 12(我猜dplyr 分组无法按照我目前理解的方式工作)。
第二个问题是,当某家特定公司的年度报告值之间的差距大于 12 个月时。 na.locf 也没有填充任何东西,因为差距大于maxgap。在这种情况下,我想将最后一个可用值结转到接下来的 12 个月,如下所示。
id Date MonVariable ReportMonth AnnVariable
1 HIJKLMN 2019-08 1 2019-08 149
2 HIJKLMN 2019-07 2 <NA> <NA>
3 HIJKLMN 2019-06 3 <NA> <NA>
4 HIJKLMN 2019-05 4 2018-05 101
5 HIJKLMN 2019-04 5 2018-05 101
6 HIJKLMN 2019-03 6 2018-05 101
7 HIJKLMN 2019-02 7 2018-05 101
8 HIJKLMN 2019-01 8 2018-05 101
9 HIJKLMN 2018-12 9 2018-05 101
10 HIJKLMN 2018-11 1 2018-05 101
11 HIJKLMN 2018-10 2 2018-05 101
12 HIJKLMN 2018-09 3 2018-05 101
13 HIJKLMN 2018-08 4 2018-05 101
14 HIJKLMN 2018-07 5 2018-05 101
15 HIJKLMN 2018-06 6 2018-05 101
16 HIJKLMN 2018-05 7 2018-05 101
17 HIJKLMN 2018-04 8 2017-06 113
感谢您的帮助!!
【问题讨论】:
标签: r database time-series na zoo