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

如何使用pivot_wider按pic_type分组两两合并tibble中的行

R实现同分组行转宽表方案

你可以通过tidyverse套件的行列转换逻辑快速实现需求,也可以用base R完成操作:

方法1:tidyverse实现(推荐)

先加载依赖包,构造示例数据后执行转换:

# 加载包
library(tidyverse)

# 构造你的示例数据
df <- tibble(
  pic_type = c(1,1,2,2),
  dim1 = c(3,5,8,5),
  dim2 = c(2,5,1,1),
  dim3 = c(1,6,2,1)
)

# 核心转换逻辑
result <- df %>%
  # 按pic_type分组
  group_by(pic_type) %>%
  # 给组内的两行标记序号1、2
  mutate(row_idx = row_number()) %>%
  ungroup() %>%
  # 行转宽,按序号拆分dim字段
  pivot_wider(
    id_cols = pic_type,
    names_from = row_idx,
    values_from = starts_with("dim")
  )

生成的结果默认列名为dim1_1、dim2_1、dim3_1、dim1_2、dim2_2、dim3_2,带后缀区分同维度的第一个/第二个取值,符合R数据框列名不重复的规范。如果确实需要和示例一致的重复列名(不推荐,会影响后续数据处理),可以用names(result) <- c("pic_type", rep(c("dim1","dim2","dim3"), 2))手动修改。

方法2:base R实现

不需要加载第三方包的实现方式:

# 拆分分组后合并行
result <- do.call(rbind, lapply(split(df, df$pic_type), function(x) {
  cbind(pic_type = x$pic_type[1], x[1, -1], x[2, -1], row.names = NULL)
}))
# 重置列名(可选,同上述说明)
names(result) <- c("pic_type", rep(c("dim1","dim2","dim3"), 2))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 07:24:06