如何计算R列中某些数据的聚合

问题描述 投票:0回答:1

我有一个数据集,其中包括一些育龄及以上的女性。每个女性都指定了一个 id 和包含母亲年龄的数据集。对于每个女性,我们都是平等的。 Parity1 是女性的第一个孩子。胎次中的值指的是儿童的年龄。例如,id为1的女性 人口普查时,他今年 38 岁,第一个孩子 15 岁,第二个孩子 13 岁,第三个孩子 10 岁,第四个孩子 0 岁。

    library("tidyverse")
    sample_df<-
    tibble(
    id = c(1,2,3,4,5,6,7,8,9,10),
    AGE=     c(38, 39,  40,  41, 42,  43,  44,   45,  46,     47 ),
    parity1 = c(15, 14,  13,  12,  9,   8,  14,   13,  3,     7 ),
    parity2=  c(13,  9,   9,  10,  7,   4,  13,   11, NA,     5 ),
    parity3=  c(10,  7,   3,   3,  6,   2,   9,   25, NA,     2),
    parity4=  c( 0, NA,  NA,   1, NA,   0,   0 ,   1, NA,     NA),
    )

长话短说,我想知道根据母亲的年龄,我的数据集中总共有多少个每个年龄段的孩子(孩子的年龄)。例如,根据母亲的年龄,我们有多少个0岁的孩子。最后,代码应该终止于一个表格,其中指定每个育龄妇女的 0、1、2、3、4、5... 岁的孩子数量。最终的输出应该是这样的:

母亲年龄 0 1 2 3
38 1
39
40 1
41 1 1
42
43 1 1 1
44 1
45 1
46 1
47 1

看起来很残酷,但我非常感谢您提供的任何帮助。提前非常感谢您。

r dataframe dplyr sum aggregate
1个回答
1
投票

步骤:

  1. 使数据变长,降低 NA 值
  2. 将数据变宽,对新列进行排序,得到它们的长度(即1),然后将所有NA替换为零
sample_df |>
  pivot_longer(starts_with("parity"), values_drop_na = TRUE) |>
  pivot_wider(names_from = value, values_from = name, names_sort = TRUE, values_fn = length, values_fill = 0)

输出:

# A tibble: 10 × 19
      id   AGE   `0`   `1`   `2`   `3`   `4`   `5`   `6`   `7`   `8`   `9`  `10`
   <dbl> <dbl> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
 1     1    38     1     0     0     0     0     0     0     0     0     0     1
 2     2    39     0     0     0     0     0     0     0     1     0     1     0
 3     3    40     0     0     0     1     0     0     0     0     0     1     0
 4     4    41     0     1     0     1     0     0     0     0     0     0     1
 5     5    42     0     0     0     0     0     0     1     1     0     1     0
 6     6    43     1     0     1     0     1     0     0     0     1     0     0
 7     7    44     1     0     0     0     0     0     0     0     0     1     0
 8     8    45     0     1     0     0     0     0     0     0     0     0     0
 9     9    46     0     0     0     1     0     0     0     0     0     0     0
10    10    47     0     0     1     0     0     1     0     1     0     0     0
# ℹ 6 more variables: `11` <int>, `12` <int>, `13` <int>, `14` <int>,
#   `15` <int>, `25` <int>
© www.soinside.com 2019 - 2024. All rights reserved.