首页 > 解决方案 > R:没有任何情况的日期怎么填?

问题描述

我有一个数据框,例如

db1 <- data.frame(date=as.Date(c('2020/01/01','2020/01/03','2020/01/07')),case=c(1,3,4))

我想填写日期,例如,

db2 <- data.frame(date=as.Date(c('2020/01/01','2020/01/02','2020/01/03','2020/01/04','2020/01/05','2020/01/06','2020/01/07')),case=c(1,0,3,0,0,0,4))

请告诉我该怎么做。

标签: rdatefill

解决方案


我们可以使用tidyr::complete来完成缺失的日期。

tidyr::complete(db1, date = seq(min(date), max(date), by = "1 day"), 
                 fill = list(case = 0))

#   date        case
#  <date>     <dbl>
#1 2020-01-01     1
#2 2020-01-02     0
#3 2020-01-03     3
#4 2020-01-04     0
#5 2020-01-05     0
#6 2020-01-06     0
#7 2020-01-07     4

另一种方法dplyr可能是:

library(dplyr)

db1 %>%
  slice(-n()) %>%
  tidyr::uncount(case + 1) %>%
  group_by(date) %>%
  mutate(newdate = date + row_number() - 1, 
         case = replace(case, row_number() != 1, 0)) %>%
  bind_rows(db1 %>% slice(n()) %>% rename(newdate = date)) %>%
  ungroup() %>%
  select(-date)

推荐阅读