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

在R中保留列名与行名完整转置Data Frame的问题

问题

需要实现类似Excel的转置功能,要求:

  • 保留原DataFrame的列名为转置后的第一行
  • 原第一行数据作为转置后的列名

已编写代码如下,但转置后出现列名或行名丢失的问题:

Book1 <- read_excel("C:/X/X/X- X/X/Book1.xlsx")
dput(Book1)
X1 <- as.data.frame(t(Book1)) 
X2 <- transpose(Book1)

当前使用的DataFrame结构:

structure(list(`Row Labels` = structure(c(1667260800, 1669852800, 
1672531200, 1675209600, 1677628800, 1680307200, 1682899200, 1685577600, 
1688169600), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    X1 = c(1, 2, 2, 3, 3, 4, 4, 5, 5), X2 = c(2, 3, 2, 3, 2, 
    3, 2, 3, 2), X3 = c(3, 4, 3, 4, 3, 4, 3, 4, 3), X6 = c(1, 
    1, 1, 1, 1, NA, NA, NA, NA), X7 = c(1, 1, 1, 1, 1, NA, NA, 
    NA, NA), X8 = c(1, 1, 1, 1, 1, NA, NA, NA, NA), X9 = c(1, 
    1, 1, 1, 1, NA, NA, NA, NA)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -9L))

解决方案

直接用t()或transpose()转置时,原列名会变成行名,原第一行数据无法直接映射为新列名,导致信息丢失。可以通过以下两种方式实现需求:

方法1:基础R实现

library(readxl)

# 读取数据
Book1 <- read_excel("C:/X/X/X- X/X/Book1.xlsx")

# 提取原第一行作为新列名(转为字符格式避免时间格式问题)
new_cols <- as.character(unlist(Book1[1, ]))

# 提取原列名作为转置后的第一行数据
new_first_row <- colnames(Book1)

# 转置原数据(排除第一行)
transposed_df <- as.data.frame(t(Book1[-1, ]))

# 设置转置后的列名
colnames(transposed_df) <- new_cols

# 将原列名作为第一行添加到数据框顶部
final_df <- rbind(new_first_row, transposed_df)

# 查看结果
print(final_df)

方法2:tidyr包实现(更灵活,保留数据类型)

library(readxl)
library(tidyr)
library(dplyr)

# 读取数据
Book1 <- read_excel("C:/X/X/X- X/X/Book1.xlsx")

# 通过变长+变宽实现转置,同时设置列名
final_df <- Book1 %>%
  # 添加行号用于后续分组转置
  mutate(row_num = row_number()) %>%
  # 将数据转为长格式
  pivot_longer(-row_num, names_to = "original_columns", values_to = "values") %>%
  # 将长格式转回宽格式,实现转置
  pivot_wider(names_from = row_num, values_from = "values") %>%
  # 将原第一行数据设为新列名(排除original_columns列)
  rename_with(~as.character(unlist(Book1[1, .x])), -original_columns)

# 查看结果
print(final_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:09:57