如何使用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
相关产品推荐
相关产品推荐

