如果变量名称中有年龄,如何使用 tidyverse summarize 计算中位年龄?

How to use tidyverse summarise for median age, if age is in the variable name?

晚上好,

我确实有一个问题,我似乎无法绕过。

假设我正在使用如下所示的简化数据集

library(tidyverse)

data <- tribble(~town , ~patients_aged_17, ~patients_aged_18, ~patients_aged_19, "newyork", 2, 3, 1,"berlin", 1, 1, 4) 

我想使用 tidyverse summarize 函数来计算每个城镇的平均年龄。

data %>% group_by(town) %>% summarise(median_patient_age = median([problem]))

纽约的中位数为 median(c(17, 17, 18, 18, 18, 19),因此仅使用中位数函数不会产生所需的结果。

问题是,我怎样才能让 R 以正确的方式计算中位数?我想答案很简单,但我就是想不通。

Ps。我不能像示例中那样手动完成,因为有许多组和“年龄变量”的方法。

有什么提示吗?

祝你好运,大卫。

我认为这会得到想要的结果

library(tidyverse)

data <- tribble(~town , ~patients_aged_17, ~patients_aged_18, ~patients_aged_19, "newyork", 2, 3, 1,"berlin", 1, 1, 4) 

data %>%
  pivot_longer(cols=c(-town), names_to = "age_group", values_to = "count") %>%
  mutate(
    age = as.numeric(gsub("[^\d]+", "", age_group, perl=TRUE)),
    age_total = count*age 
  ) %>%
  group_by(town) %>%
  summarise(
     count_total = sum(count),
     age_sum = sum(age_total)
  ) %>%
  mutate(
    median_age = age_sum/count_total
  ) %>% 
  select(town, median_age)

# A tibble: 2 x 2
  town    median_age
  <chr>        <dbl>
1 berlin        18.5
2 newyork       17.8