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

如何使用tidyr::unnest_longer()展开嵌套列表并转为tibble?

正确使用unnest_longer()转换嵌套列表为tibble

你的核心问题是没搞清楚unnest_longer()的适用场景:它是用来展开单列中的嵌套结构,而你之前错误地把整个嵌套列表塞进了tibble的单列里,导致输出不符合预期。以下是针对你的场景的正确实现,以及相关解释:

正确的unnest_longer()用法

先将嵌套列表转换为包含两个嵌套列的tibble,再对每一列执行展开操作:

library(tidyr)
library(tibble)

# 示例嵌套列表
nl <- list(time = list("2023-02-06", "2023-02-07", "2023-02-08",
                       "2023-02-09", "2023-02-10", "2023-02-11",
                       "2023-02-12"), 
           precipitation_sum = list(0.9, 0, 0, 0.3, 0, 0, 0))

# 正确实现
tibble(!!!nl) %>% 
  unnest_longer(cols = c(time, precipitation_sum))

更简洁的替代方案

由于你的每个子列表都是长度一致的向量,其实可以跳过unnest_longer(),直接用更简单的方式转换:

# 直接拆分构造tibble
tibble(time = unlist(nl$time), precipitation_sum = unlist(nl$precipitation_sum))

# 批量处理所有列(和你原方法逻辑一致但更简洁)
tibble(!!!purrr::map(nl, unlist))

为什么你之前的写法错误?

你执行的unnest_longer(tibble(nl), col = everything())会先创建一个只有一列的tibble(列名为nl,值是整个嵌套列表),展开后会把顶级的两个子列表拆成两行,得到的是nl_id和嵌套值的结构,完全不符合你想要的7行两列的宽数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:31:57