如果变量名中有年龄,如何使用tidyverse Summary作为中间年龄?

如果变量名中有年龄,如何使用tidyverse Summary作为中间年龄?,r,tidyverse,median,R,Tidyverse,Median,晚上好, 我确实有一个问题,就是我似乎无法四处走动 假设我使用的是一个简化的数据集,如下所示 library(tidyverse) 纽约的中位数是中位数(c(17,17,18,18,18,19),因此简单地使用中位数函数不会产生期望的结果 问题是,我怎样才能让R以正确的方式计算中值?我想答案很简单,但我就是想不出来 另外,我不能像示例中那样手工操作,因为有很多组和“年龄变量” 有什么提示吗 大卫,祝你一切顺利。我想这会带来你想要的结果 library(tidyverse) data <-

晚上好,

我确实有一个问题,就是我似乎无法四处走动

假设我使用的是一个简化的数据集,如下所示

library(tidyverse)

纽约的中位数是
中位数(c(17,17,18,18,18,19)
,因此简单地使用中位数函数不会产生期望的结果

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

另外,我不能像示例中那样手工操作,因为有很多组和“年龄变量”

有什么提示吗


大卫,祝你一切顺利。

我想这会带来你想要的结果

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

库(tidyverse)
数据%
pivot_更长(cols=c(-town),名称_to=“age\u group”,值_to=“count”)%>%
变异(
age=as.numeric(gsub(“[^\\d]+”,“”,age\u组,perl=TRUE)),
年龄\总数=计数*年龄
) %>%
组别(城市)%>%
总结(
总数=总和(计数),
年龄总和=总和(年龄总和)
) %>%
变异(
年龄中位数=年龄总和/总数
) %>% 
选择(城镇、年龄中位数)
#一个tibble:2x2
城市中位年龄
1柏林18.5
2纽约17.8

非常感谢您的回答。但是,结果不匹配(即柏林的中位年龄应该是19岁,新yourk的中位年龄应该是18岁)。但是,我认为我找到了一个解决方案;代码看起来有点难看
interimdata%pivot\u更长(cols=-(town),name\u to=“age\u group”,values\u to=“count”)%%>%变异(age=str\u sub(年龄组,-2,-1))%%>%groupby(town)%%>%summary(intvar2=rep(age,count))
interimdata$intvar2%groupby(town)%%>%summary(median\u age=median(intvar2))
有没有办法更好地格式化我以前的答案?我被允许的最大字符数限制了(而代码的格式并没有按照期望的格式)你的答案是19/18,而我的答案是18.5/17.8。你的答案四舍五入到0位,我的答案四舍五入到1位。非常感谢你的回答。我学到了很多!
data %>% group_by(town) %>% summarise(median_patient_age = median([problem]))
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