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