r - 根据恒定增长因子计算每月人口估计值
问题描述
我希望有一个简单的解决方案,但我无法解决它。
我有一些城市的人口规模,例如:
df <- data.frame(city = c("A","B","C","D","E","F","G"), start_pop = c(100,200,300,400,500,600,700))
start_pop
是 2019 年 1 月的人口。假设人口每月增长 0.022%,我想计算每个城市到 2019 年、2020 年和 2021 年的每月人口估计值,另存为Jan19
等Feb19
,这依赖于前面的输入计算。
我可以做到这一点mutate
,例如:
increase <- 1.00022
df <- data.frame(city = c("A","B","C","D","E","F","G"), start_pop = c(100,200,300,400,500,600,700)) %>%
mutate(Feb19 = start_pop * increase) %>%
mutate(Mar19 = Feb19 * increase) %>%
mutate(Apr19 = Mar19 * increase)
...
但是有没有更简洁的方法来获得相同的结果,可能是通过循环或应用函数?
解决方案
这会吗?
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>
推荐阅读
- python - 从烧瓶响应对象中提取 JSON 数据
- php - 如何从php中的Excel文件中删除所有合并的单元格?
- python - 正则表达式:如何捕获可能由空格分隔的 6-12 位数字序列而不捕获任何尾随空格
- python - Seaborn.clustermap :使用不同的指标对行和列进行聚类
- php - Codeigniter 4在null上调用成员函数get()
- c++ - 无法使用 openImageIO 加载图像
- tensorflow - TFLite 动态输入形状
- postgresql - 用自己的一部分更新日期范围
- python - 当 if 语句适用时,Django 继续 for 循环中的下一个对象
- r - 在 p 值之后捕获数字