制作医疗提供者城市年度统计表格时数值异常归零问题求助
解决医疗提供者年度数量统计表格问题
你之前使用三维table()的方式会生成冗余维度,后续转置操作逻辑也有误,导致出现错误的0值。以下是两种直接可行的实现方案:
方法一:用tidyverse(dplyr)构建目标表格
这种方式逻辑清晰,适合处理分组统计需求:
# 加载dplyr包 library(dplyr) # 按城市、年份分组统计总数(如需仅统计提供服务的,取消filter行注释) summary_table <- HCProvidersbyCity %>% # filter(Provides_Service == 1) %>% # 可选:仅保留提供服务的记录 group_by(City, Year) %>% summarise(Provider_Count = n(), .groups = "drop") %>% mutate(Year = ifelse(Year == 21, "2021", "2023")) %>% # 转换年份为直观格式 pivot_wider(names_from = City, values_from = Provider_Count, values_fill = 0) # 查看结果 summary_table
方法二:用Base R实现
无需额外包,用原生函数完成统计:
# 统计城市-年份的提供者总数(如需仅统计提供服务的,添加subset参数) count_data <- aggregate( x = list(Provider_Count = HCProvidersbyCity$Provides_Service), by = list(City = HCProvidersbyCity$City, Year = HCProvidersbyCity$Year), FUN = length, # 统计所有提供者;若要统计提供服务的,替换为sum # subset = HCProvidersbyCity$Provides_Service == 1 # 可选:仅筛选提供服务的记录 ) # 转换年份格式 count_data$Year <- ifelse(count_data$Year == 21, "2021", "2023") # 转换为宽表(年份为行、城市为列) summary_table <- reshape( count_data, idvar = "Year", timevar = "City", direction = "wide", v.names = "Provider_Count" ) # 清理列名前缀 colnames(summary_table) <- gsub("Provider_Count\\.", "", colnames(summary_table)) # 查看结果 summary_table
关键说明
- 若统计所有提供者总数:用
n()(dplyr)或length()(Base R);若统计仅提供服务的提供者数量:用sum(Provides_Service)(dplyr)或sum(Base R的FUN参数),并可配合提前过滤记录。 values_fill = 0(dplyr)或reshape的默认补0逻辑,会为无数据的城市-年份组合填充0,保证表格结构完整。- 将年份转换为
2021/2023格式,让表格可读性更强。
内容的提问来源于stack exchange,提问作者Abby
相关产品推荐
相关产品推荐

