根据组内缺失的日期添加行

use*_*707 4 r dataframe

我想行添加到基于最小和最大的数据的数据帧中的每个组。假设这是我的原始数据框:

df = data.frame(Date = as.Date(c("2017-12-01", "2018-01-01", "2017-12-01", "2018-01-01", "2018-02-01","2017-12-01", "2018-02-01")),
            Group = c(1,1,2,2,2,3,3),
            Value = c(100, 200, 150, 125, 200, 150, 175))
Run Code Online (Sandbox Code Playgroud)

请注意,第 1 组有 2 个连续日期,第 2 组有 3 个连续日期,第 3 组缺少中间的日期 (2018-01-01)。我希望能够通过添加缺失日期的行来完成数据框。但问题是我只想根据每个组中最小和最大日期之间缺少的日期添加其他日期。因此,如果我要完成此数据框,它将如下所示:

df_complete = data.frame(Date = as.Date(c("2017-12-01", "2018-01-01", "2017-12-01", "2018-01-01", "2018-02-01","2017-12-01","2018-01-01", "2018-02-01")),
            Group = c(1,1,2,2,2,3,3,3),
            Value = c(100, 200, 150, 125, 200, 150,NA, 175))
Run Code Online (Sandbox Code Playgroud)

因为第 3 组缺少一个日期,所以只添加了一行。没有为第 1 组添加日期,因为它具有最小日期 (2017-12-01) 和最大日期 (2018-01-01) 之间的所有日期。

MKR*_*MKR 12

您可以使用tidyr::completewithdplyr来寻找解决方案。在interval连续日期之间似乎是month。方法如下:

library(dplyr)
library(tidyr)

df %>% group_by(Group) %>%
  complete(Group, Date = seq.Date(min(Date), max(Date), by = "month"))

# A tibble: 8 x 3
# Groups: Group [3]
# Group Date       Value
# <dbl> <date>     <dbl>
#   1  1.00 2017-12-01   100
# 2  1.00 2018-01-01   200
# 3  2.00 2017-12-01   150
# 4  2.00 2018-01-01   125
# 5  2.00 2018-02-01   200
# 6  3.00 2017-12-01   150
# 7  3.00 2018-01-01    NA
# 8  3.00 2018-02-01   175
Run Code Online (Sandbox Code Playgroud)

数据

df = data.frame(Date = as.Date(c("2017-12-01", "2018-01-01", "2017-12-01", "2018-01-01",
               "2018-02-01","2017-12-01", "2018-02-01")),
                Group = c(1,1,2,2,2,3,3),
                Value = c(100, 200, 150, 125, 200, 150, 175))
Run Code Online (Sandbox Code Playgroud)