R语言:如何将多行DataFrame重塑为同列结构的单行数据
解决方案:将分组多行DataFrame重塑为单行多列结构
可以借助tidyverse工具包中的group_by()、row_number()和pivot_wider()函数实现无循环的重塑,步骤如下:
- 为每个
Variable1分组添加行索引,标记每组内的行顺序; - 使用
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
相关产品推荐
相关产品推荐

