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

如何在R中将列作为类别完成数据框长宽格式转换?

R 宽表转长表实现方案

以下提供两种实现方式,优先满足base R的需求:

1. 简洁Base R实现(无需安装第三方包)

首先构造测试用宽表数据(可跳过这步直接替换为你自己的数据集):

# 示例宽表数据
wide_df <- data.frame(
  year = c(2020, 2021, 2022, 2023),
  big = c(100, 120, 150, 180),
  small = c(30, 45, 55, 70)
)

写法1:用stack函数(代码最短)

long_df <- cbind(year = rep(wide_df$year, 2), stack(wide_df, select = c(big, small)))
# 调整列名和顺序匹配要求
colnames(long_df) <- c("year", "values", "size")
long_df <- long_df[, c("size", "values", "year")]

写法2:用reshape函数(灵活性更高)

long_df <- reshape(
  wide_df,
  varying = c("big", "small"),
  v.names = "values",
  timevar = "size",
  times = c("big", "small"),
  direction = "long"
)
# 可选:清理冗余字段和行索引
rownames(long_df) <- NULL
long_df <- long_df[, c("size", "values", "year")]

2. 第三方包实现(tidyr 语法更易读)

如果允许使用第三方包,tidyr::pivot_longer的逻辑更直观,不容易出错:

# 未安装则先执行:install.packages("tidyr")
library(tidyr)

long_df <- pivot_longer(
  wide_df,
  cols = c(big, small),
  names_to = "size",
  values_to = "values"
)

转换后输出示例:

size values year
1  big    100 2020
2 small     30 2020
3  big    120 2021
4 small     45 2021
5  big    150 2022
6 small     55 2022
7  big    180 2023
8 small     70 2023

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:57:03