You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言按分类变量聚合连续变量 实现连续指标为行分类值为列的方法

R实现分组聚合后自定义行列结构的解决方案

直接对包含因子列Species的聚合结果使用t()转置会触发全表字符转换,导致数值属性丢失,以下是两种可保留数值类型的实现方案:

方案1:tidyverse(dplyr+tidyr)规范解法

为当前dplyr版本推荐的写法,逻辑清晰易维护,可灵活切换统计指标:

# 加载依赖包
library(dplyr)
library(tidyr)

mydata2 <- iris

result <- mydata2 %>%
  # 按物种分组
  group_by(Species) %>%
  # 对所有数值列计算均值,可替换为min、max等统计函数
  summarise(across(where(is.numeric), ~mean(.x, na.rm = TRUE))) %>%
  # 数值列转为长格式
  pivot_longer(cols = -Species, names_to = "指标", values_to = "统计值") %>%
  # 物种因子水平转为列
  pivot_wider(names_from = Species, values_from = 统计值)

# 查看结果与数据类型
print(result)
str(result)

输出结果完全符合需求,三个物种对应的列均为数值类型。

方案2:R基础包轻量解法

无需安装第三方包,仅用基础函数即可实现:

mydata2 <- iris
# 分组计算所有数值列的均值
res_agg <- aggregate(. ~ Species, data = mydata2, mean)
# 单独对数值部分转置,避免因子列导致类型转换
rownames(res_agg) <- res_agg$Species
result_base <- as.data.frame(t(res_agg[, -1]))
# 调整列顺序与格式
result_base$指标 <- rownames(result_base)
result_base <- result_base[, c("指标", "setosa", "versicolor", "virginica")]
rownames(result_base) <- NULL

# 查看结果
print(result_base)

内容的提问来源于stack exchange,提问作者Sky_7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:06:05