【发布时间】:2019-04-03 15:11:46
【问题描述】:
我有一个包含 ID、开始日期、结束日期、活动状态的数据集。 当前数据集包含 150.000 行和 50.000 个 ID,但会更大。
我希望 R 在同一行重新组合相同 ID 和相同时期(开始日期和结束日期),不同活动发生在重叠时期。
换句话说,我尝试: 1)重塑数据以获得特定行中的重叠和非重叠周期。 2) 将重叠的活动状态粘贴在一起。
我已经试过了:
Find overlapping dates for each ID and create a new row for the overlap
和
Convert data of overlapping time ranges to data of distinct time ranges
这两种解决方案都非常好,对我帮助很大。
但是,这两种方法无法同时处理 150.000 行的所有数据集。我通过划分我的数据集来使用第二种解决方案。我需要 2 个小时来分析 18 000 行。
我想知道一些解决方案是否可以在 R 上更有效。我正在考虑使用 mutate 但我不太熟悉该功能。
输入数据如下所示:
ID START END STATUS
5c0e83 2013-11-01 2015-01-01 P1
5c0e83 2002-09-01 2003-09-01 F2
5c0e83 2016-09-01 2016-09-01 F0
5c0e83 2006-01-01 2007-01-01 P3
5c0e83 2003-11-01 2013-11-01 P2
5c0e83 2015-09-01 2018-01-01 P0
5c0e83 2003-09-01 2005-09-01 F1
感谢之前引用的脚本输出一直是这样的 (Convert data of overlapping time ranges to data of distinct time ranges)
ID STATUS START END
5c0e83 F3 2002-09-01 2002-09-01
5c0e83 F3 2002-09-01 2002-10-01
5c0e83 F3 2002-10-01 2002-10-01
5c0e83 F3 2002-10-01 2002-11-01
5c0e83 F3 2002-11-01 2002-11-01
5c0e83 F3 2002-11-01 2003-01-01
5c0e83 F3 2003-01-01 2003-01-01
5c0e83 F3 2003-01-01 2003-09-01
5c0e83 F3, F2 2003-09-01 2003-09-01
5c0e83 F2 2003-09-01 2003-10-01
5c0e83 F2 2003-10-01 2003-10-01
5c0e83 F2 2003-10-01 2003-11-01
5c0e83 F2, P2 2003-11-01 2003-11-01
5c0e83 F2, P2 2003-11-01 2004-01-01
5c0e83 F2, P2 2004-01-01 2004-01-01
5c0e83 F2, P2 2004-01-01 2004-09-01
5c0e83 F2, P2 2004-09-01 2004-09-01
5c0e83 F2, P2 2004-09-01 2004-10-01
5c0e83 F2, P2 2004-10-01 2004-10-01
5c0e83 F2, P2 2004-10-01 2004-11-01
效果很好,但治疗时间很长。 我想知道是否有人想出一种更有效的方式来执行这项任务。
感谢您的帮助
【问题讨论】:
-
输出中的STATUS
F3来自哪里? -
我只从输入和输出中提取了一个片段,以告知我的数据形状与引用的示例相同。抱歉,不够精确。
标签: r