Среднее число детей по возрасту мамы? - PullRequest
0 голосов
/ 14 апреля 2020

DF example

Итак, у меня есть этот DF, показывающий возраст мамы, а столбцы b3_01-b3_10 соответствуют датам рождения детей (преобразованных в нечто, называемое «кодом месяца века») не важно здесь). В любом случае, я пытаюсь подсчитать среднее число детей по возрасту мамы. Так, например, у 37-летней мамы в строке 2 есть 2 ребенка, поскольку в столбцах b3_01 и b3_02 есть значения.

Желаемый результат - 1 столбец с указанием возраста мам и 2-й столбец со средним числом детей.

Это то, что у меня есть до сих пор (я не знаю, что этот код на самом деле вычисляет tbh), но мне действительно нужно среднее число детей по возрасту мамы:

> Kids_Mean <- PHBS18 %>%
>         select(mom_age, b3_01, b3_02, b3_03, b3_04, b3_05, b3_06, b3_07, b3_08, b3_09, b3_10) %>%
>         group_by(mom_age) %>%
>         add_count(mom_age, b3_01, b3_02, b3_03, b3_04, b3_05, b3_06, b3_07, b3_08, b3_09, b3_10)
structure(list(case_id = 1:20, person_id = c(1, 2, 2, 2, 2, 1, 
1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), household_id = c(1, 
6, 7, 19, 27, 30, 31, 33, 36, 42, 44, 45, 46, 47, 50, 52, 54, 
59, 63, 64), year = c(2018, 2018, 2018, 2018, 2018, 2018, 2018, 
2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 
2018, 2018), month = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1), survey_date_cmc = c(1417, 1417, 1417, 1417, 
1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 
1417, 1417, 1417, 1417, 1417), mom_age = c(28, 37, 59, 31, 45, 
61, 46, 61, 37, 54, 38, 26, 63, 64, 58, 29, 61, 56, 49, 32), 
    mom_dob_cmc = c(1081, 973, 709, 1045, 877, 685, 865, 685, 
    973, 769, 961, 1105, 661, 649, 721, 1069, 685, 745, 829, 
    1033), b3_01 = c(NA, 1297, 1189, 1405, 1297, NA, 1321, NA, 
    1345, NA, 1321, 1381, NA, NA, NA, NA, NA, NA, NA, 1405), 
    b3_02 = c(NA, 1297, NA, 1393, 1225, NA, 1297, NA, 1285, NA, 
    1249, 1333, NA, NA, NA, NA, NA, NA, 1105, 1393), b3_03 = c(NA, 
    NA, NA, NA, 1189, NA, 1201, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), b3_04 = c(NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1081, NA), b3_05 = c(NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_), b3_06 = c(NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_), b3_07 = c(NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_), b3_08 = c(NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_), b3_09 = c(NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_), b3_10 = c(NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_)), row.names = c(NA, 
-20L), class = c("tbl_df", "tbl", "data.frame")) 

1 Ответ

2 голосов
/ 14 апреля 2020

Я думаю, что это делает это:

library(tidyverse)

df %>% 
  pivot_longer(starts_with("b3")) %>%  # Move from wide to long format
  group_by(mom_age, case_id) %>%  # Group by each case, keeping mom age for later
  summarise(n_kids = sum(!is.na(value))) %>%  # Find the number of kids in each case
  summarise(mean_kids = mean(n_kids))  # Find mean for each mom age
...