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
相关产品推荐
相关产品推荐

