R语言按多分组汇总统计family总数量的方法咨询
R实现方案
方法1:tidyverse套件实现(代码可读性高,推荐)
先确保安装并加载tidyverse:
# 首次使用先执行安装 # install.packages("tidyverse") library(tidyverse)
生成分组统计长表
result_long <- df %>% # 列名包含空格时必须用反引号包裹避免语法报错 group_by(station, `depth bin`) %>% summarise( family_total = sum(family, na.rm = TRUE), # na.rm=TRUE设置自动跳过缺失值 .groups = "drop" # 统计完成后自动解除分组,避免后续操作异常 )
转换为目标宽表结构(station为行、depth bin为列)
result_wide <- result_long %>% pivot_wider( names_from = `depth bin`, values_from = family_total, values_fill = 0 # 无数据的分组组合默认填充0 )
方法2:基础R实现(无需安装额外依赖包)
生成分组统计长表
result_long <- aggregate(family ~ station + `depth bin`, data = df, FUN = sum, na.rm = TRUE)
转换为目标宽表结构
result_wide <- reshape( result_long, idvar = "station", timevar = "depth bin", direction = "wide", v.names = "family", fill = 0 ) # 可选:去除列名的默认前缀,和目标结构列名完全匹配 colnames(result_wide) <- gsub("^family\\.", "", colnames(result_wide))
补充说明:如果你需要统计的是每个分组下不同family的种类数而非数值总和,将上述代码中的
sum(family, na.rm = TRUE)替换为n_distinct(family, na.rm = TRUE)(tidyverse方法),或把aggregate的FUN = sum改为FUN = function(x) length(unique(x))(基础R方法)即可。
内容的提问来源于stack exchange,提问作者Gina
相关产品推荐
相关产品推荐

