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

R语言如何实现数据表列转置为行(宽表转长表)?

R语言实现宽表转长表操作

你要做的是典型的宽格式数据转长格式数据操作,以下是两种可直接运行的实现方案:

方案1:使用tidyr包的pivot_longer(推荐)

这是目前R语言数据整理的主流用法,语法简洁易读:

# 第一步:构造你的原始示例数据
df <- data.frame(
  State = c("NY", "CA", "LA"),
  Republicans = c(20, 30, 20),
  Democrats = c(40, 40, 50),
  Others = c(5, 5, 5)
)

# 加载tidyr包(如果没安装先运行 install.packages("tidyr") 安装)
library(tidyr)

# 执行转置操作
df_long <- pivot_longer(
  df,
  cols = -State, # 保留State列不动,其余所有列参与转置
  names_to = "Party", # 原列名转为新的Party列的值
  values_to = "Votes" # 原单元格数值转为新的Votes列的值
)

# 可选:按State排序,和你给出的预期结果顺序完全一致
df_long <- df_long[order(df_long$State), ]

方案2:基础R原生实现(无需安装第三方包)

如果你不想安装额外包,可以用R自带的reshape函数实现:

# 构造原始数据和上面一致
df <- data.frame(
  State = c("NY", "CA", "LA"),
  Republicans = c(20, 30, 20),
  Democrats = c(40, 40, 50),
  Others = c(5, 5, 5)
)

# 执行转置操作
df_long <- reshape(
  df,
  idvar = "State",
  varying = 2:4, # 第2到第4列是需要转置的列
  v.names = "Votes",
  times = c("Republicans", "Democrats", "Others"),
  direction = "long"
)

# 调整列名和行号,得到最终格式
df_long <- df_long[, c("State", "time", "Votes")]
colnames(df_long)[2] <- "Party"
rownames(df_long) <- NULL

两种方案输出的结果都和你要求的目标格式完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:36:03