将不均匀间隔的时间数据改变为R中每小时均匀间隔

时间:2016-12-14 21:14:52

标签: r time-series

我有一些不均匀间隔的天气数据,我想抓住简单的每小时值。我需要每小时,所以我可以使用单独的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

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

1 个答案:

答案 0 :(得分:0)

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

我计算了tst.propertiesdatetime

之间的绝对距离
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),]

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