【发布时间】:2021-06-12 20:28:03
【问题描述】:
我的目标是计算嵌套在空间单位中的年龄组随时间的增长率。我正在使用的数据框的结构是这样的(但要大得多):
set.seed(1234)
df <- data.frame(Time = c(1,1,1,1,2,2,2,2,3,3,3,3),
Region = rep(c("A", "A", "B", "B"),3),
Age = rep(c(1,2), 6),
No_Persons = round(rnorm(12, mean = 10),0))
在Region 的每个类别中,我需要将No_Persons 从一年到另一年(Time)以及Age 组1 和2 之间的变化。所以基本上操作将是Age2_Time2 /Age1_Time1。我尝试使用各种lag-functions 以及data.table::shift 来实现我的目标,但无法让它发挥作用。例如,我虽然这会给我想要的结果,但它只会吐出NAs:
library(tidyverse)
df %>%
group_by(Region) %>%
mutate(Ratio = No_Persons / dplyr::lag(No_Persons,
n = 1,
order_by = "Age"))
我通过使用pivot_wider 得到正确的结果,然后通过使用列手动计算增长率,如下所示:
df %>%
pivot_wider(names_from = "Age", values_from = "No_Persons") %>%
group_by(Region) %>%
mutate(Ratio = `2` / dplyr::lag(`1`, order_by = Time))
# A tibble: 6 x 5
# Groups: Region [2]
Time Region `1` `2` Quote
<dbl> <chr> <dbl> <dbl> <dbl>
1 1 A 9 10 NA
2 1 B 11 8 NA
3 2 A 10 11 1.22
4 2 B 9 9 0.818
5 3 A 9 9 0.9
6 3 B 10 9 1
但是,由于原始数据集有更多的年龄组,这变得乏味且容易出错。我更喜欢程序化解决方案。
【问题讨论】:
标签: r data.table tidyverse