You need to enable JavaScript to run this app. R语言(是否可用dplyr)如何将分组数据的分类列转为列表头
优惠活动
大模型
产品
解决方案
定价
更多

R语言(是否可用dplyr)如何将分组数据的分类列转为列表头

长表转宽矩阵的R实现方案

可借助dplyr所属的tidyverse生态工具简便实现目标转换,以下为可直接复用的操作代码:

基于dplyr生态的标准实现

完全可以借助dplyr完成转换,搭配同生态的tidyr工具即可通过简洁的管道操作实现长表转宽表,语法连贯性强,无额外学习成本:

# 加载所需包(需提前安装:install.packages(c("dplyr", "tidyr")))
library(dplyr)
library(tidyr)

# 长表转目标宽表核心代码
wide_result <- df %>%
  # 调整Group列取值为数值序号,匹配目标表格样式
  mutate(Group = as.numeric(gsub("G", "", Group))) %>%
  # 执行长转宽操作
  pivot_wider(
    names_from = Category,  # 指定把Category列的各个取值作为新表的列名
    values_from = Value     # 指定用Value列的对应值填充新表单元格
  )

运行上述代码得到的wide_result结构完全匹配给出的目标效果:第一列为Group序号1/2/3,后续列依次为Category 1-5对应的数值。

无额外包依赖的基础R实现

如果不想加载第三方包,可直接用R原生的reshape()函数完成转换:

# 原生函数转宽表
wide_native <- reshape(
  data = df,
  idvar = "Group",    # 指定作为行标识的列
  timevar = "Category",# 指定要拆分为列的来源列
  direction = "wide"
)
# 统一格式匹配目标
wide_native$Group <- as.numeric(gsub("G", "", wide_native$Group))
colnames(wide_native) <- gsub("Value\\.", "", colnames(wide_native))

兼容旧版本的实现

如果是使用历史版本的reshape2包,可通过dcast()完成转换:

library(reshape2)
wide_legacy <- dcast(df, Group ~ Category, value.var = "Value")
wide_legacy$Group <- as.numeric(gsub("G", "", wide_legacy$Group))

实操提示:如果原始长表中存在同一Group+Category组合的重复数值,可在pivot_wider中通过values_fn = \(x) mean(x)这类参数指定聚合规则,避免函数抛出值不唯一的报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 18:57:00