如何将3小时数据转换为小时数据?

时间:2019-09-16 06:55:33

标签: r

我为几个具有3小时和1小时数据帧的站点提供了一组数据。我已经能够抓住数据并将数据分为1小时和3小时分成几组。但是我想将3小时内的数据集转换为每小时数据。我不需要估计小时之间的丢失数据,我可以将它们填充为丢失数据,但是我需要具有统一的数据结构,而我正在使用的数据库中的所有其他数据都已经按小时计算,除了少数几个站。 我提供了一些显示当前数据集的数据。 hourly dataset3hourly datasetexpected dataset

1 个答案:

答案 0 :(得分:0)

这是您要使用R和tidyverse

解决的问题的最佳猜测

我已读入您的数据。行绑定后,我们将数据扩展为包括缺少的时间点,并加入原始数据以获得所需的结果。

library(tidyverse)
#read in the data
df1 = readxl::read_excel("df1.xlsx")
df2 = readxl::read_excel("df2.xlsx")

#fix names of one dataframe
names(df1) <- names(df2)

#create proper timestamps
df = bind_rows(df1,df2) %>% 
  mutate(ts = lubridate::ymd_hm(paste0(year, "-", month, "-", day, " ", hour,":00")))

#expand timestamps and station
expanded_ts <-
  df  %>% 
  tidyr::expand(ts, station)

#join for desired result
left_join(expanded_ts, df, by=c("ts", "station"))

## A tibble: 96 x 8
#   ts                  station  year month   day  hour    T2    DP
#   <dttm>                <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 2014-08-01 00:00:00  450070    NA    NA    NA    NA    NA    NA
# 2 2014-08-01 00:00:00  450110  2014     8     1     0   295   259
# 3 2014-08-01 00:00:00  450320  2014     8     1     0   295   259
# 4 2014-08-01 00:00:00  450390  2014     8     1     0   304   236
# 5 2014-08-01 01:00:00  450070  2014     8     1     1   320   250
# 6 2014-08-01 01:00:00  450110  2014     8     1     1   310   250
# 7 2014-08-01 01:00:00  450320    NA    NA    NA    NA    NA    NA
# 8 2014-08-01 01:00:00  450390    NA    NA    NA    NA    NA    NA
# 9 2014-08-01 02:00:00  450070  2014     8     1     2   330   250
#10 2014-08-01 02:00:00  450110  2014     8     1     2   320   250