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

如何使用R将多行DataFrame转换为列名组合的单行DataFrame

R语言实现多行DataFrame转单行拼接格式

构造示例数据

先构造和需求一致的原始DataFrame:

df <- data.frame(
  `1` = c("Apple", "Car", "House"),
  `2` = c("Orange", "Truck", "Apartment"),
  `3` = c("Grape", "Plane", "Garage"),
  row.names = c("A", "B", "C"),
  check.names = FALSE
)

方法1:tidyverse实现(逻辑清晰易修改)

适合已经习惯tidyverse语法的场景,代码可读性高:

library(tidyverse)

result <- df %>%
  # 将行名转为普通列
  rownames_to_column("row_id") %>%
  # 宽表转长表,保留行标识、列标识、对应值
  pivot_longer(-row_id, names_to = "col_id", values_to = "val") %>%
  # 拼接得到新列名
  mutate(new_col = paste(col_id, row_id, sep = "_")) %>%
  # 长表转回宽表,得到单行结果
  pivot_wider(names_from = new_col, values_from = val)

# 调整行索引为0,和示例格式一致
rownames(result) <- 0

方法2:Base R实现(无需额外依赖)

不需要安装任何第三方包,直接用R原生函数实现:

# 转置原数据后展平,得到按行优先排序的所有值
vals <- as.vector(t(df))
# 生成拼接后的新列名:原列名_原行名
new_cols <- paste(rep(colnames(df), nrow(df)), rep(rownames(df), each = ncol(df)), sep = "_")
# 构造单行DataFrame,关闭自动修正列名避免数字开头列被加前缀
result <- data.frame(
  matrix(vals, nrow = 1, dimnames = list(0, new_cols)),
  check.names = FALSE
)

两种方法运行后得到的result就是目标格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:15:03