如何按指定列Localidad对DataFrame分组行求和并计算指定列均值
R语言DataFrame按指定列分组计算均值与占比实现方案
你之前使用group_by()搭配rowSums()报错的核心原因是rowSums()是基础包函数,无法识别dplyr的分组状态,会直接对全表逐行计算,导致分组逻辑失效。
实现步骤
1. 加载依赖包
library(dplyr)
2. 按Localidad分组计算所有数值列的平均值
mean_result <- mydataframe %>% # 指定按Localidad分组 group_by(Localidad) %>% summarise( # 所有数值列计算均值,自动忽略空值 across(where(is.numeric), mean, na.rm = TRUE), # 同一Localidad下相同的非数值列取第一个值即可 across(where(~!is.numeric(.)), first) )
3. 计算各Localidad对应指标的占比
如果你需要计算X2.1到X2.9这类指标的占比(单指标值/该Localidad下所有X类指标总和),可以用如下代码:
ratio_result <- mean_result %>% # 开启逐行计算模式 rowwise() %>% mutate( # 计算当前行所有X开头指标的总和 x_total = sum(c_across(starts_with("X2."))), # 批量生成各X指标的占比列,列名自动加ratio_前缀 across(starts_with("X2."), ~.x / x_total, .names = "ratio_{.col}") ) %>% # 关闭逐行计算模式 ungroup()
如果需要统计每个Localidad的行数占总数据集行数的比例,可以追加如下逻辑:
# 统计各Localidad的行数与占比 count_ratio <- mydataframe %>% count(Localidad, name = "row_cnt") %>% mutate(row_ratio = row_cnt / sum(row_cnt)) # 合并占比与均值结果 final_result <- left_join(ratio_result, count_ratio, by = "Localidad")
内容的提问来源于stack exchange,提问作者Juan Jesus
相关产品推荐
相关产品推荐

