В R вы можете использовать dplyr::complete()
для этой цели:
library(tidyverse) #includes dplyr
# generate dummy full dataset
full_data <- tibble(Date = as.Date(1:24),
Hour = 1:24) %>%
expand(Date, Hour) %>%
mutate(Acc = rnorm(nrow(.)))
full_data
# A tibble: 576 x 3
# Date Hour Acc
# <date> <int> <dbl>
# 1 1970-01-02 1 0.453
# 2 1970-01-02 2 -0.0518
# 3 1970-01-02 3 0.882
# 4 1970-01-02 4 -0.386
# 5 1970-01-02 5 -0.284
# 6 1970-01-02 6 0.454
# 7 1970-01-02 7 -0.754
# 8 1970-01-02 8 -0.213
# 9 1970-01-02 9 0.610
# 10 1970-01-02 10 1.29
# remove some timestamps that are missing
data_with_missing <- full_data %>%
slice_sample(n=200)
data_with_missing
# A tibble: 200 x 3
# Date Hour Acc
# <date> <int> <dbl>
# 1 1970-01-04 4 0.683
# 2 1970-01-02 6 0.454
# 3 1970-01-24 10 -1.67
# 4 1970-01-12 6 1.12
# 5 1970-01-13 5 -0.786
# 6 1970-01-04 3 -2.03
# 7 1970-01-11 22 1.02
# 8 1970-01-11 15 1.11
# 9 1970-01-18 22 0.688
# 10 1970-01-24 14 -0.00612
# ... with 190 more rows
# Now use complete to fill in the missing data
recompleted_data <- data_with_missing %>%
complete(Date, Hour)
recompleted_data
# A tibble: 576 x 3
# Date Hour Acc
# <date> <int> <dbl>
# 1 1970-01-02 1 NA
# 2 1970-01-02 2 NA
# 3 1970-01-02 3 NA
# 4 1970-01-02 4 -0.386
# 5 1970-01-02 5 -0.284
# 6 1970-01-02 6 0.454
# 7 1970-01-02 7 -0.754
# 8 1970-01-02 8 -0.213
# 9 1970-01-02 9 NA
# 10 1970-01-02 10 NA
# ... with 566 more rows
# Check that we have the same combinations as in the full dataset
all.equal(full_data[,1:2], recompleted_data[,1:2])
# TRUE