这样可以吗?
increase <- 0.00022
df %>% mutate(mon = as.Date("2019-01-01")) %>%
group_by(city) %>%
complete(mon = seq.Date(from = as.Date("2019-01-01"), to = as.Date("2021-12-01"), by = "month")) %>%
mutate(start_pop = if_else(is.na(start_pop), increase+1, start_pop),
start_pop = cumprod(start_pop)) %>%
pivot_wider(names_from = mon, values_from = start_pop)
# A tibble: 7 x 37
# Groups: city [7]
city `2019-01-01` `2019-02-01` `2019-03-01` `2019-04-01` `2019-05-01` `2019-06-01`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 100 100. 100. 100. 100. 100.
2 B 200 200. 200. 200. 200. 200.
3 C 300 300. 300. 300. 300. 300.
4 D 400 400. 400. 400. 400. 400.
5 E 500 500. 500. 500. 500. 501.
6 F 600 600. 600. 600. 601. 601.
7 G 700 700. 700. 700. 701. 701.
# ... with 30 more variables: `2019-07-01` <dbl>, `2019-08-01` <dbl>, `2019-09-01` <dbl>,
# `2019-10-01` <dbl>, `2019-11-01` <dbl>, `2019-12-01` <dbl>, `2020-01-01` <dbl>,
# `2020-02-01` <dbl>, `2020-03-01` <dbl>, `2020-04-01` <dbl>, `2020-05-01` <dbl>,
# `2020-06-01` <dbl>, `2020-07-01` <dbl>, `2020-08-01` <dbl>, `2020-09-01` <dbl>,
# `2020-10-01` <dbl>, `2020-11-01` <dbl>, `2020-12-01` <dbl>, `2021-01-01` <dbl>,
# `2021-02-01` <dbl>, `2021-03-01` <dbl>, `2021-04-01` <dbl>, `2021-05-01` <dbl>,
# `2021-06-01` <dbl>, `2021-07-01` <dbl>, `2021-08-01` <dbl>, `2021-09-01` <dbl>,
# `2021-10-01` <dbl>, `2021-11-01` <dbl>, `2021-12-01` <dbl>