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

R tidyverse中如何使用unnest_longer同时展开多列数据?

方案1:直接使用pivot_longer实现(更简洁,推荐)

该场景本质是多组宽表转长表,用pivot_longer的.value参数可以直接实现,无需嵌套再展开的中间步骤:

library(tidyverse)
df <- tibble(
  id = 1, 
  v1 = 1, v2 = 2, v3 = 3,
  t1 = "a", t2 = "b", t3 = "c"
)

df %>% 
  pivot_longer(
    cols = -id,
    names_to = c(".value", NA),
    names_pattern = "^(v|t)(\\d)$"
  )

运行输出:

# A tibble: 3 × 3
     id     v t    
  <dbl> <dbl> <chr>
1     1     1 a    
2     1     2 b    
3     1     3 c

方案2:嵌套后同时展开多列

如果需要沿用先嵌套再展开的逻辑,有两种兼容实现方式:

  • 方式A:使用unnest直接展开列表列(兼容所有tidyr版本)
df %>% 
  nest(v = c(v1, v2, v3),
       t = c(t1, t2, t3)) %>% 
  unnest(cols = c(v, t))
  • 方式B:升级tidyr到≥1.3.0版本,新版unnest_longer已支持多列同时操作
# 升级tidyr后运行以下代码即可
df %>% 
  nest(v = c(v1, v2, v3),
       t = c(t1, t2, t3)) %>% 
  unnest_longer(col = c(v, t))

报错原因说明

之前运行报错是因为使用的tidyr版本较低,低版本unnest_longer仅支持单次传入单个列进行操作,不支持同时传入多个列的向量。


内容的提问来源于stack exchange,提问作者John-Henry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:36:02