【问题标题】:Issue merging dataframes in R using POSIXct使用 POSIXct 在 R 中合并数据帧
【发布时间】:2020-12-30 11:03:26
【问题描述】:

我有两个数据帧(per_frame, values) - 第一个包含 24 小时周期的 POSIXct 值,间隔 15 分钟。

periods = as.POSIXct(seq.POSIXt("2019-06-01 04:00:00 UTC","2019-06-02 03:45:00 UTC", by=900))

per_frame = data.frame(Period = periods)

第二个包含一列用于上面的一些时间值(但不是全部),另一列用于“平均值”。

Period avg_value
2019-06-01 04:45:00 4
2019-06-01 05:00:00 7
2019-06-01 05:45:00 9
2019-06-01 08:45:00 2
2019-06-01 10:00:00 4

我想创建一个新的数据框,将可用的平均值添加到第一个数据框,在没有的地方留下“缺失值”。我认为这可以使用以下方法轻松实现:

Combined= merge(per_frame, values, by = "Period", all.x = TRUE)

但是,它创建的新数据框的每个 Period 的值都不正确。它将值添加到值数据框中没有相应平均值的某些时间段。我不确定我在这里做错了什么?

【问题讨论】:

  • 不确定您的序列创建代码是否完全正确。你的意思是seq.POSIXt(as.POSIXct("2019-06-01 04:00:00 UTC"), as.POSIXct("2019-06-02 03:45:00 UTC"), by = 900) 吗?此外,您的第二个数据框不是以理想的方式提供的。另外,第二个数据框中的 Period 列是什么类?也是POSIXct吗?
  • 道歉 - 如果没有包含大量信息,我真的不知道如何解释我的第二个数据框。我意识到(出于某种我不明白的原因)第一个数据帧的时间值是 tz UTC,而第二个数据帧是 BST。因此不匹配。
  • 很好的解决方案,有趣的问题。为了完整起见 - 对于这个问题,您可以简单地对第二个数据帧的 5 行进行采样并使用 dput(your data frame) 输出它 - 这样我们就会看到结构并且可能能够更好地重现问题跨度>

标签: r merge


【解决方案1】:

抱歉 - 经过一番调查,我意识到两个数据库中使用的时区不同 - 因此在合并时不匹配。我实际上不确定为什么会发生这种情况,因为我使用相同的数据导入来生成第一个数据帧的开始和结束值以及第二个数据帧的值。尽管使用 as.POSIXct 函数中的 'tz' 值,我还是能够覆盖它。

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 2014-04-04
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多