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

R语言:如何将多行DataFrame重塑为同列结构的单行数据

解决方案:将分组多行DataFrame重塑为单行多列结构

可以借助tidyverse工具包中的group_by()、row_number()和pivot_wider()函数实现无循环的重塑,步骤如下:

  1. 为每个Variable1分组添加行索引,标记每组内的行顺序;
  2. 使用pivot_wider()将长格式数据转为宽格式,通过names_glue参数自定义列名格式,生成带数字后缀的重复列。

完整代码示例:

# 加载tidyverse包(若未安装先执行 install.packages("tidyverse"))
library(tidyverse)

# 原始数据
df <- data.frame (Variable1  = c("A", "A","A","A","A", "B", "B","B","B","B" ),
                  startup = c(100, 200, 300, 400, 500, 300, 400, 500, 600, 700),
                  end = c(110, 210, 310, 410, 510, 310, 410, 510, 610, 710)
)

# 为每个分组添加行号
df <- df %>% 
  group_by(Variable1) %>% 
  mutate(row_id = row_number()) %>% 
  ungroup()

# 重塑为目标格式
df1 <- df %>% 
  pivot_wider(
    id_cols = Variable1,  # 保留作为行标识的列
    names_from = row_id,  # 用于生成列名后缀的列
    values_from = c(startup, end),  # 需要展开的数值列
    names_glue = "{.value}{row_id}"  # 定义新列名的格式:原始列名+行号
  )

# 输出结果
df1

执行后得到的结果与期望结构完全一致:

# A tibble: 2 × 11
  Variable1 startup1 startup2 startup3 startup4 startup5 end1 end2 end3 end4 end5
  <chr>        <dbl>    <dbl>    <dbl>    <dbl>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A              100      200      300      400      500   110   210   310   410   510
2 B              300      400      500      600      700   310   410   510   610   710

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:57:06