如果变量名称中有年龄,如何使用 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
晚上好,
我确实有一个问题,我似乎无法绕过。
假设我正在使用如下所示的简化数据集
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