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

如何在R语言中将列值转换为列名?(长转宽数据示例)

在R中将长格式数据转为指定宽格式的方法

你的需求是把长格式数据(地区、体重状况、均值)转换为以体重状况为行、地区取值为列、均值为填充值的宽格式。下面是两种常用实现方式:

1. 使用tidyr包的pivot_wider()(推荐,tidyverse生态)

先构造示例数据:

# 还原你的长格式数据
df <- data.frame(
  地区 = c("东北", "东北", "东北", "西南", "西南", "西南"),
  体重状况 = c("体重过轻", "体重正常", "体重过重", "体重过轻", "体重正常", "体重过重"),
  均值 = c(30, 75, 52, 44, 68, 72)
)

调用pivot_wider()完成转换:

library(tidyr)

wide_df <- pivot_wider(
  data = df,
  id_cols = 体重状况,  # 指定作为行标识的列
  names_from = 地区,   # 指定要转为列名的列
  values_from = 均值   # 指定填充列的数值来源
)

print(wide_df)

输出结果完全匹配需求:

体重状况东北西南
体重过轻3044
体重正常7568
体重过重5272

2. 使用reshape2包的dcast()

若习惯用reshape2工具链,可通过dcast()实现:

library(reshape2)

wide_df <- dcast(
  data = df,
  体重状况 ~ 地区,  # 格式为「行变量 ~ 列变量」
  value.var = "均值" # 指定填充的数值列
)

print(wide_df)

该方法会得到与上面完全一致的结果。

注意:如果数据中存在重复的(体重状况, 地区)组合,pivot_wider()默认报错,可通过values_fn参数指定聚合规则(如values_fn = mean);dcast()默认统计重复值数量,需自定义聚合规则时可设置fun.aggregate参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:20:34