使用R语言dplyr分组后统计总条数及各类别对应数量的问题
解决方案
你可以直接在dplyr的summarize()中新增条件求和的统计项,匹配对应死亡类型的行进行计数即可:
library(dplyr) total_deaths <- data %>% group_by(City, Year) %>% summarize( n_Total = n(), n_Homicides = sum(`Type of Death` == "Homicide"), n_Suicides = sum(`Type of Death` == "Suicide"), .groups = "drop" )
注意:列名Type of Death包含空格,需要用反引号包裹避免语法报错,.groups = "drop"参数用于关闭分组残留,避免dplyr输出提示警告。
如果你后续需要统计的死亡类型较多,逐个写统计项效率太低,也可以用计数+长宽转换的方案批量生成对应列:
library(dplyr) library(tidyr) total_deaths <- data %>% # 按城市、年份、死亡类型分组计数 count(City, Year, `Type of Death`, name = "cnt") %>% # 长表转宽表,把死亡类型转为单独的列 pivot_wider( names_from = `Type of Death`, values_from = cnt, # 没有对应数据的填充为0 values_fill = 0, # 列名加前缀和你需要的格式对齐 names_glue = "n_{.name}s" ) %>% # 计算总死亡数 mutate(n_Total = n_Homicides + n_Suicides) %>% # 调整列顺序和你期望的输出一致 select(City, Year, n_Total, everything())
内容的提问来源于stack exchange,提问作者tatiwawa
相关产品推荐
相关产品推荐

