我有一个类似的数据框,
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))
请告诉我怎么做。
我们可以使用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)