首页 > 解决方案 > 按组插入缺失的连续周

问题描述

我有一个包含每周数据的数据集。一周从星期一开始,到星期日结束。该数据集也按组分类。

我想检测每个组的开始和结束之间是否缺少任何连续日期。这是一个示例数据集:

Week<- as.Date(c('2015-04-13', '2015-04-20', '2015-05-04', '2015-06-29', '2015-07-27', '2015-08-03'))
Group <- c('A', 'A', 'A','B','B','B','B')
Value<- c(2,3,10,4,11,9,8)

df<-data.frame(Week, Group, Value)

df
      Week    Group     Value
2015-04-13        A         2
2015-04-20        A         3
2015-05-04        A        10
2015-06-29        B         4
2015-07-06        B        11
2015-07-27        B         9
2015-08-03        B         8

2015-07-06对于 B 组,和之间缺少数据2015-07-272015-04-20在和之间的 A 组中也存在缺失数据2015-05-04。我想为该组添加一行并将值设为NA. 我有很多组,我希望我的预期输出如下:

      Week    Group     Value
2015-04-13        A         2
2015-04-20        A         3
2015-04-27        A        NA
2015-05-04        A        10
2015-06-29        B         4
2015-07-06        B        11
2015-07-13        B        NA
2015-07-20        B        NA
2015-07-27        B         9
2015-08-03        B         8

任何帮助都会很棒,谢谢!

标签: rdplyr

解决方案


您可以completetidyr包中使用,即

library(tidyverse)

df %>% 
 group_by(Group) %>% 
 complete(Week = seq(min(Week), max(Week), by = 'week'))

这使,

# A tibble: 10 x 3
# Groups:   Group [2]
   Group Week       Value
   <fct> <date>     <dbl>
 1 A     2015-04-13     2
 2 A     2015-04-20     3
 3 A     2015-04-27    NA
 4 A     2015-05-04    10
 5 B     2015-06-29     4
 6 B     2015-07-06    NA
 7 B     2015-07-13    NA
 8 B     2015-07-20    NA
 9 B     2015-07-27    11
10 B     2015-08-03     9

推荐阅读