【问题标题】:Changing unevenly spaced time data into evenly spaced hourly in R在R中将不均匀间隔的时间数据更改为均匀间隔的每小时
【发布时间】:2016-12-14 21:14:52
【问题描述】:

我有一些间隔不均匀的天气数据,我想获取简单的小时值。我需要每小时一次,所以我可以将这些数据与单独的 data.frame 结合起来

天气数据示例:

> weather_df
A tibble: 10 × 3
              datetime temperature temperature_dewpoint
                <dttm>       <dbl>                <dbl>
1  2011-01-01 00:00:00           4                   -1
2  2011-01-01 00:20:00           3                   -1
3  2011-01-01 00:40:00           3                   -1
4  2011-01-01 01:00:00           2                   -1
5  2011-01-01 01:20:00           2                    0
6  2011-01-01 01:45:00           2                    0
7  2011-01-01 02:05:00           1                   -1
8  2011-01-01 02:25:00           2                    0
9  2011-01-01 02:45:00           2                   -1
10 2011-01-01 03:10:00           2                    0

我希望只有每小时的数据,但正如您所见,观察结果并不总是落在小时标记上。我试过四舍五入,但我同时有多个观察结果。

weather_df$datetime_rounded <- as.POSIXct(round(weather_df$datetime, units = c("hours")))

weather_df
# A tibble: 10 × 4
              datetime temperature temperature_dewpoint    datetime_rounded
            <dttm>       <dbl>                <dbl>              <dttm>
1  2011-01-01 00:00:00           4                   -1 2011-01-01 00:00:00
2  2011-01-01 00:20:00           3                   -1 2011-01-01 00:00:00
3  2011-01-01 00:40:00           3                   -1 2011-01-01 01:00:00
4  2011-01-01 01:00:00           2                   -1 2011-01-01 01:00:00
5  2011-01-01 01:20:00           2                    0 2011-01-01 01:00:00
6  2011-01-01 01:45:00           2                    0 2011-01-01 02:00:00
7  2011-01-01 02:05:00           1                   -1 2011-01-01 02:00:00
8  2011-01-01 02:25:00           2                    0 2011-01-01 02:00:00
9  2011-01-01 02:45:00           2                   -1 2011-01-01 03:00:00
10 2011-01-01 03:10:00           2                    0 2011-01-01 03:00:00

如果不计算 datetime 与 datetimerounded 的差异,我无法轻易确定要保留哪个观察值。必须有一种更优雅的方式来做到这一点。任何帮助将不胜感激!

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    这是我的非优雅解决方案。

    我计算了datetime和datetime_rounded之间的绝对距离

    weather_df$time_dist <- abs(weather_df$datetime - weather_df$datetimerounded)
    

    然后我按距离排序

    weather_df <- weather_df[order(weather_df$time_dist),]
    

    已删除的舍入列的重复项。由于它已排序,因此它使观察值最接近圆形时间。

    weather_df <- weather_df [!duplicated(weather_df$datetimerounded),]
    

    然后按时间排序

    weather_df <-  weather_df [order(weather_df$datetimerounded),]
    

    当然必须有更好的方法来做到这一点。我对在 R 中处理时间序列还不是很熟悉。

    【讨论】:

      猜你喜欢
      • 2022-08-03
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多