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

如何将R语言长格式DataFrame转宽格式,适配相关矩阵等数据分析?

R语言实现长格式转宽格式(多分组行标识)

针对你的需求,这里提供两种常用的实现方式,都是R生态中处理长转宽场景的标准方案:

方法一:用tidyr::pivot_wider(推荐,tidyverse生态)

这是当前最灵活易用的长转宽工具,属于tidyverse套件的一部分,语法清晰且扩展性强。

# 先加载tidyverse(包含tidyr包)
library(tidyverse)

# 执行转换:以Area+Year为行标识,Item为列名,Value为填充值,缺失值用NA填充
wide_df <- df %>%
  pivot_wider(
    id_cols = c(Area, Year),
    names_from = Item,
    values_from = Value,
    values_fill = list(Value = NA)
  )

额外处理:Item与Unit的对应关系

如果每个Item的单位(Unit)是固定的,可以单独提取一份单位映射表,方便后续可视化时参考:

unit_reference <- df %>%
  distinct(Item, Unit) %>%
  arrange(Item)

方法二:用base R的reshape函数

如果不想加载额外包,可以用R基础包自带的reshape函数:

# 基础包转换
wide_df_base <- reshape(
  data = df,
  idvar = c("Area", "Year"),  # 行标识字段
  timevar = "Item",           # 转成列的字段
  direction = "wide",         # 指定转换方向为宽格式
  v.names = "Value",          # 填充列的数值字段
  drop = "Unit"               # 移除不需要的Unit字段,按需调整
)

# 自动生成的列名会带"Value."前缀,可移除:
colnames(wide_df_base) <- gsub("Value\\.", "", colnames(wide_df_base))

注意事项

  • 确保Area和Year的组合是唯一的行标识,否则同一分组下多值会导致列表列(可通过values_fn参数聚合,比如values_fn = list(Value = mean)取均值)
  • 转换完成后,直接用wide_df即可做相关矩阵、热图等分析:
    # 计算相关矩阵(忽略NA)
    cor_matrix <- cor(wide_df[, -c(1, 2)], use = "pairwise.complete.obs")
    
    # 绘制热图(基础包示例)
    heatmap(cor_matrix)
    

内容的提问来源于stack exchange,提问作者Santiago Fernndez del Castillo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:25:26