如何在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)
输出结果完全匹配需求:
| 体重状况 | 东北 | 西南 |
|---|---|---|
| 体重过轻 | 30 | 44 |
| 体重正常 | 75 | 68 |
| 体重过重 | 52 | 72 |
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
相关产品推荐
相关产品推荐

