【发布时间】:2023-03-06 18:18:01
【问题描述】:
我希望使用两个数据集都存在的“日期时间”列合并两个数据集(POSIXct 格式:dd/mm/yyyy hh:mm)。以下是来自两个数据集的示例数据:
# Dataset 1 (dts1)
datetime count period
1 30/03/2011 02:32 27 561
2 30/03/2011 02:42 3 600
3 30/03/2011 02:52 0 574
4 30/03/2011 03:02 1 550
5 30/03/2011 03:12 15 600
6 30/03/2011 03:22 0 597
# Dateset 2 (dts2)
datetime dist car satd alt
1 30/03/2011 01:59 23.9 1 3 1.76
2 30/03/2011 02:58 14.7 1 7 6.36
3 30/03/2011 03:55 10.4 2 9 -0.34
4 30/03/2011 04:53 35.4 1 3 3.55
5 30/03/2011 05:52 56.1 1 7 -0.91
6 30/03/2011 06:48 12.3 1 4 6.58
7 30/03/2011 07:48 10.7 1 5 4.18
如果这是合并两个帧中匹配行的简单情况,则可以使用基本的merge(data1, data2, by="datetime") 或rbind() 函数。
但是,我的问题更复杂,因为 两个数据集中的时间间隔不相等。 Dataset 1 包含 精确 10 分钟间隔的数据(每行包含关于在指定日期/时间结束的 10 分钟块的信息),而 dataset 2 包含 大约的数据 1 小时间隔(每行包含在指定日期/时间结束的 1 小时块中的信息)。
为了让事情变得更加困难,两个数据集中的行的开始时间之间存在时间不匹配(即dts1: 01/03/2013 10:00:00, @ 987654327@: 01/03/2012 09:58:12)。 dts2 间隔在整个数据集中也有所不同(1 小时左右的±几分钟)。我想将数据集 1 中的每 10 分钟数据行与数据集 2 中适合的小时块链接(以及 dts2 中的所有关联列值)。将有一些行可以适合 2 个不同的小时块(即 30/03/2011 03:02),但我只需要将这些行链接到一个小时块。
我想得到这样的结果:
datetime_dts1 count period datetime2_dts2 dist car satd alt
1 30/03/2011 02:32 27 561 30/03/2011 02:58 14.7 1 7 6.36
2 30/03/2011 02:42 3 600 30/03/2011 02:58 14.7 1 7 6.36
3 30/03/2011 02:52 0 574 30/03/2011 02:58 14.7 1 7 6.36
4 30/03/2011 03:02 1 550 30/03/2011 02:58 14.7 1 7 6.36
5 30/03/2011 03:12 15 600 30/03/2011 03:55 10.4 2 9 -0.34
6 30/03/2011 03:22 0 597 30/03/2011 03:55 10.4 2 9 -0.34
我已经搜索了这个问题的答案,但未能解决它,而且我的 R 能力不高。如果有人能给我一个方向或提供解决方案,我将非常感激。
【问题讨论】:
-
你能提供一个
dput输出吗?获取数据很痛苦 -
我真的看不懂你的长文,但你不能把时间四舍五入,然后根据四舍五入的时间合并吗?
-
第 5 行,
3:12更接近于2:58而不是3:55。您根据什么将其分配给3:55?如果没有规则,就很难合并。 -
嗨阿伦/罗兰。谢谢你的cmets。 Arun-我将 3:12 分配到 3:55,希望所有 dts1 值与 dts2 中比自身大的最近的 hh:mm 行匹配,除非 dts1 中的值比 hour:min 行多不到 5 分钟在 dts2 中进行(下面的示例)。抱歉,我不确定如何提供 dput 输出。