R:如何填写无任何日期?

问题描述 投票:0回答:1

我有一个类似的数据框,

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))

请告诉我怎么做。

r date fill
1个回答
0
投票

我们可以使用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)
© www.soinside.com 2019 - 2024. All rights reserved.