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

在R中转置Dataframe并将第一列设为表头的技术问题

在R中实现指定规则的DataFrame转置

基础R实现方案

针对你的需求,我们可以分步骤处理,把原列名从行名转为第一列,同时保留原第一列作为转置后的表头:

1. 构造示例数据(匹配你给出的示例)

df <- data.frame(
  X = c("A", "B"),  # 原第一列,将作为转置后的表头
  S1 = c(1, 1),
  S2 = c(2, 2),
  S3 = c(3, 3),
  stringsAsFactors = FALSE
)

2. 执行转置并调整结构

# 提取原数据框的列名(排除第一列),将作为转置后的第一列
original_cols <- colnames(df)[-1]

# 转置原数据框的数值部分(排除第一列)
transposed_data <- t(df[,-1])

# 转为数据框并设置列名为原第一列的值
df_transposed <- data.frame(transposed_data, stringsAsFactors = FALSE)
colnames(df_transposed) <- df[,1]

# 将原列名作为第一列绑定到数据框
df_transposed <- cbind(Variable = original_cols, df_transposed)

# 重置行名(可选,让行名从1开始)
rownames(df_transposed) <- NULL

运行后得到的df_transposed就是你需要的结果:

Variable A B
1      S1 1 1
2      S2 2 2
3      S3 3 3

适配你自己的测试数据

用你的测试数据执行同样逻辑:

df <- data.frame(
  ID = c(10, 20, 30),
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 22),
  stringsAsFactors = FALSE
)

original_cols <- colnames(df)[-1]
transposed_data <- t(df[,-1])
df_transposed <- data.frame(transposed_data, stringsAsFactors = FALSE)
colnames(df_transposed) <- df$ID
df_transposed <- cbind(Variable = original_cols, df_transposed)
rownames(df_transposed) <- NULL

得到的结果:

Variable    10  20      30
1     Name Alice Bob Charlie
2      Age   25  30       22

tidyverse实现方案(更简洁)

如果你习惯用tidyverse工具集,可以用pivot_longer和pivot_wider来实现:

library(tidyverse)

df_transposed <- df %>%
  # 将宽表转为长表,提取原列名到新列
  pivot_longer(cols = -1, names_to = "Variable", values_to = "Value") %>%
  # 将原第一列转为表头,重构宽表
  pivot_wider(names_from = 1, values_from = "Value") %>%
  # 调整列顺序
  select(Variable, everything())

该方法逻辑更直观,不需要手动处理转置和行名问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:27:19