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

如何将含常量列的tibble重塑为单行?pivot_wider使用求助

解决思路

你可以通过先转长再转宽的两步操作实现需求,核心是先把n和max列拆成键值对,再将id与键名拼接成新列名,具体步骤如下:

步骤1:将宽格式转为长格式

先用pivot_longer把n、max这两列转为长格式,生成包含var(原列名)和val(对应值)的新列,同时保留id、class、Time列:

library(tidyr)
library(dplyr)

df_long <- df %>%
  pivot_longer(cols = c(n, max), names_to = "var", values_to = "val")

转换后df_long的结构是:

# A tibble: 6 × 5
     id class  Time var     val
  <dbl> <dbl> <dbl> <chr> <dbl>
1     1     0     1 n         1
2     1     0     1 max     -10
3     2     0     1 n         2
4     2     0     1 max       2
5     3     0     1 n         1
6     3     0     1 max       3

步骤2:拼接列名并转宽格式

接下来用unite把id和var列拼接成新的列名,再用pivot_wider转成目标宽格式:

df_wide <- df_long %>%
  unite(col = "new_col", id, var, sep = "_") %>%
  pivot_wider(names_from = new_col, values_from = val)

运行后得到的结果就是你要的单行结构:

# A tibble: 1 × 7
  class  Time `1_n` `1_max` `2_n` `2_max` `3_n` `3_max`
  <dbl> <dbl> <dbl>   <dbl> <dbl>   <dbl> <dbl>   <dbl>
1     0     1     1     -10     2       2     1       3

简化版(一步完成)

也可以把两步合并成一条链式操作,更简洁:

df_final <- df %>%
  pivot_longer(cols = c(n, max), names_to = "var", values_to = "val") %>%
  unite(new_col, id, var, sep = "_") %>%
  pivot_wider(names_from = new_col, values_from = val)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:14