如何合并数据行并求和?R语言合并非男女性别行汇总数值的问题
解决方案
首先先还原你的数据集(方便直接测试):
df <- data.frame( Gender = c("Agender", "Female", "Genderfluid", "Non Binary", "Male"), Total = c(9, 15, 10, 2, 14) )
你的原代码报错核心问题:
- R对大小写敏感,你数据里的列是
Gender不是gender - 错误使用
rownames():df$Gender是向量,没有行名,应该直接操作该列的取值 - 分组名称写错了,你要的是「其他性别身份」不是「Transgender」
aggregate语法错误,需要指定要聚合的列(Total),而非整个数据框
方法一:Base R 实现
先生成分组标签,再聚合求和:
# 生成分组标签:保留Female和Male,其余归为「其他性别身份」 df$Group <- ifelse(df$Gender %in% c("Female", "Male"), df$Gender, "其他性别身份") # 按分组汇总Total列 result <- aggregate(Total ~ Group, data = df, sum) # 调整列名和行顺序,匹配目标格式 colnames(result) <- c("Gender", "Total") result <- result[c(2, 3, 1), ]
方法二:dplyr 包实现(更简洁直观)
如果习惯用tidyverse工具链,这个写法更清晰:
library(dplyr) result <- df %>% mutate(Gender = case_when( Gender %in% c("Female", "Male") ~ Gender, TRUE ~ "其他性别身份" )) %>% group_by(Gender) %>% summarise(Total = sum(Total)) %>% arrange(match(Gender, c("Female", "Male", "其他性别身份")))
最终得到的结果:
| Gender | Total |
|---|---|
| Female | 15 |
| Male | 14 |
| 其他性别身份 | 21 |
内容的提问来源于stack exchange,提问作者Ken James
相关产品推荐
相关产品推荐

