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

如何对tibble进行重塑:实现列转行及2×4转2×2格式转换

关于tibble重塑的两个问题解答

一、如何将tibble的列转换为行(宽表转长表)

在tidyverse生态中,最常用的工具是tidyr包的pivot_longer()函数,它可以轻松将多列宽格式数据转换为长格式(列转行)。

基础用法示例

假设你有如下宽格式tibble:

library(tidyverse)
wide_tbl <- tibble(
  学生ID = 1:2,
  数学 = c(90, 85),
  英语 = c(88, 92)
)

使用pivot_longer()转换为行结构:

long_tbl <- wide_tbl %>%
  pivot_longer(
    cols = c(数学, 英语),  # 指定需要转换的列
    names_to = "科目",     # 原列名存入这个新列
    values_to = "分数"     # 原列值存入这个新列
  )

转换后的长格式tibble:

# A tibble: 4 × 3
  学生ID 科目    分数
   <int> <chr>  <dbl>
1      1 数学      90
2      1 英语      88
3      2 数学      85
4      2 英语      92

二、将1×4 tibble转换为2×2 tibble(对应你的示例)

先明确你的输入和目标:

输入tibble:

input_tbl <- tibble(a = "x", b = "x", c = "x", d = "x")

目标输出tibble:

# A tibble: 2 × 2
      c     d
  <chr> <chr>
a     x     x
b     x     x

实现方法

这里需要把原tibble的前两列列名(a、b)转为行标识,同时将后两列(c、d)的值重复填充到新tibble的两行中,推荐两种简洁方法:

方法1:转置后筛选整理

output_tbl <- input_tbl %>%
  t() %>%  # 转置为矩阵
  as_tibble(rownames = "row_id") %>%  # 转换为tibble,行名存入row_id列
  filter(row_id %in% c("a", "b")) %>%  # 筛选出a、b对应的行
  select(-row_id) %>%  # 移除row_id列
  `rownames<-`(c("a", "b"))  # 设置行名为a、b

方法2:直接构造目标tibble

如果需求明确,也可以直接提取原数据的值来构造:

output_tbl <- tibble(
  c = rep(input_tbl$c, 2),
  d = rep(input_tbl$d, 2)
) %>%
  `rownames<-`(c("a", "b"))

两种方法都能得到你需要的2×2 tibble结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:25:27