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

在R语言中如何将含年份与13列的宽表转换为3列长表

在R语言中将宽格式表格转换为长格式表格

你需要的是把宽格式(年份+多月份列)的表格转换为长格式(年份、月份、数值三列),以下是两种常用实现方法:

先构造示例数据

先还原你提供的宽表数据,方便测试:

wide_df <- data.frame(
  年份 = c(2000, 2001, 2002),
  "1" = c(0.1, 0.4, 0.7),
  "2" = c(0.5, 0.1, 0.3),
  "3" = c(0.8, 0.3, 0.6)
)

方法1:使用tidyverse工具(推荐)

这是当前R语言数据处理的主流方式,代码直观易读:

# 首次使用先安装包
install.packages("tidyverse")
# 加载包
library(tidyverse)

# 执行转换
long_df <- wide_df %>%
  pivot_longer(
    cols = -年份,          # 排除年份列,转换其余所有列
    names_to = "月份",     # 原列名存入"月份"列
    values_to = "数值",    # 原列值存入"数值"列
    names_transform = list(月份 = as.integer)  # 可选:把月份转成整数类型
  )

# 查看转换结果
print(long_df)

方法2:使用Base R原生函数

不需要安装额外包,适合不想加载第三方库的场景:

# 执行转换
long_df_base <- reshape(
  wide_df,
  direction = "long",
  varying = names(wide_df)[-1],  # 指定要转换的列(除年份外)
  v.names = "数值",              # 数值列的名称
  timevar = "月份",              # 存储月份的列名
  times = names(wide_df)[-1],    # 月份的取值(原列名)
  idvar = "年份",                # 分组依据列
  new.row.names = 1:(nrow(wide_df)*length(names(wide_df)[-1]))
)

# 可选:将月份转为整数,重置行名
long_df_base$月份 <- as.integer(long_df_base$月份)
rownames(long_df_base) <- NULL

# 查看转换结果
print(long_df_base)

两种方法都能得到你需要的三列长格式表格,根据自己的使用习惯选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:30:45