从R中的表获取累积死亡率计数数据

时间:2020-04-17 17:40:43

标签: r dataframe tidyverse cumulative-sum

我有以下格式的每年不同年龄的死亡人数表:

Year    Age Deaths
1923    1   30
1923    2   22
1923    3   10
1923    4   12
1923    5   4
1923    1   40
1924    2   11
1924    3   10
1924    4   3
1924    5   5
1924    1   40
1924    2   24
1924    3   32
1924    4   12
1924    5   3

每年的年龄范围实际上是100,而直到2020年,但我以表格为例进行了简化。我想回答这个问题:“ 1923年出生的人中, X %的年龄是多少岁?”我知道 Y 人数是1923年出生的。 因此,为了追踪这个群组,我想通读表格,找出1924年有1岁儿童死亡,1925年有2岁儿童死亡,等等。当我找到 X Y 人中,有>%的人不再生活。

有人在寻找每年的年份时对R中的这种累加计数有任何建议吗?在计数时,年龄应该增加我每年想要的行的+1。我会对tidyverse答案特别感兴趣(我想他们会涉及使用Purr?),因为这是我一直在努力学习的内容,但是任何建议都值得赞赏。

预先感谢您的帮助和建议。

2 个答案:

答案 0 :(得分:1)

也许可以,我们可以按累计和来分组

library(data.table)
setDT(df)[, CumDeath := cumsum(Deaths), .(BirthYear = Year - Age)][]

数据

df <- structure(list(Year = c(1923, 1923, 1923, 1923, 1923, 1924, 1924, 
1924, 1924, 1924, 1925, 1925, 1925, 1925, 1925), Age = c(1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), Deaths = c(31L, 
15L, 14L, 3L, 42L, 50L, 43L, 37L, 14L, 25L, 26L, 27L, 5L, 27L, 
28L)), class = "data.frame", row.names = c(NA, -15L))

答案 1 :(得分:1)

听起来您可能想先确定哪个队列可以代表哪个出生年份。然后,您可以group_by出生年份并计算累积死亡人数。我为此示例制作了一些示例数据。

library(tidyverse)

df %>%
  mutate(BirthYear = Year - Age) %>%
  group_by(BirthYear) %>%
  mutate(CumDeath = cumsum(Deaths)) %>%
  arrange(BirthYear)

输出

    Year   Age Deaths BirthYear CumDeath
   <dbl> <int>  <int>     <dbl>    <int>
 1  1923     5     42      1918       42
 2  1923     4      3      1919        3
 3  1924     5     25      1919       28
 4  1923     3     14      1920       14
 5  1924     4     14      1920       28
 6  1925     5     28      1920       56
 7  1923     2     15      1921       15
 8  1924     3     37      1921       52
 9  1925     4     27      1921       79
10  1923     1     31      1922       31
11  1924     2     43      1922       74
12  1925     3      5      1922       79
13  1924     1     50      1923       50
14  1925     2     27      1923       77
15  1925     1     26      1924       26

数据

df <- structure(list(Year = c(1923, 1923, 1923, 1923, 1923, 1924, 1924, 
1924, 1924, 1924, 1925, 1925, 1925, 1925, 1925), Age = c(1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), Deaths = c(31L, 
15L, 14L, 3L, 42L, 50L, 43L, 37L, 14L, 25L, 26L, 27L, 5L, 27L, 
28L)), class = "data.frame", row.names = c(NA, -15L))