如何在R中高效对大型健康调查数据进行分组、排序与计数?
高效实现跨州性别与指标统计(R语言tidyverse方案)
针对你需要的多维度统计需求,用dplyr的分组汇总功能可以一次性完成所有州的计算,完全替代冗余的单州重复代码。以下是直接可用的解决方案:
核心代码
library(dplyr) # 假设SEX=0代表女性、SEX=1代表男性,可根据实际编码调整 result <- data %>% group_by(ENT) %>% summarise( TotalObservationsofvar = n(), # 该州总人数(对应需求a) Observations1_12 = sum(var %in% 1:12, na.rm = TRUE), # 该州var在1-12的总人数 TotalWom = sum(SEX == 0, na.rm = TRUE), # 该州女性总人数 TotalMen = sum(SEX == 1, na.rm = TRUE), # 该州男性总人数 Womenansw1_12 = sum(SEX == 0 & var %in% 1:12, na.rm = TRUE), # 女性且var在1-12的人数(对应需求b) Menansw1_12 = sum(SEX == 1 & var %in% 1:12, na.rm = TRUE) # 男性且var在1-12的人数(对应需求b) ) %>% # 调整列顺序以匹配你需要的输出格式 select(ENT, Observations1_12, TotalObservationsofvar, Womenansw1_12, Menansw1_12, TotalMen, TotalWom)
代码说明
group_by(ENT):按州分组,后续所有统计逻辑会自动应用到每个州的子集n():直接返回当前分组(州)的总观测数,即该州总人数sum(条件, na.rm=TRUE):统计满足条件的行数,na.rm=TRUE用于忽略缺失值,避免因NA导致统计结果出错var %in% 1:12:等价于var > 0 & var <13,写法更简洁直观select():最后调整列的顺序,完全匹配你给出的输出格式
输出示例
运行后会得到结构化的结果,格式与你需求一致:
# A tibble: 32 × 7 ENT Observations1_12 TotalObservationsofvar Womenansw1_12 Menansw1_12 TotalMen TotalWom <int> <int> <int> <int> <int> <int> <int> 1 1 4555 9000 533 133 1000 3333 2 2 3222 9000 233 455 9888 1111 3 3 5678 9000 544 544 1444 7794 # … with 29 more rows
内容的提问来源于stack exchange,提问作者TheMarcorojo
相关产品推荐
相关产品推荐

