R中键为唯一值的三级嵌套列表快速转换为data.frame的方法
R三层嵌套列表转指定结构tibble高效方案
使用tidyverse生态的purrr包可实现无循环的高效转换,处理大体积嵌套列表时性能远优于R级循环实现:
依赖包加载
# 若未安装先运行 install.packages("tidyverse") library(tidyverse)
转换代码
# 请将下方your_list替换为你自己的嵌套列表变量名 # 注意不要使用list作为变量名,list是R内置基础函数,覆盖会引发异常 result <- your_list %>% # 遍历最外层分组,提取名称为source列 map_dfr(~ .x %>% # 遍历第二层日期分组,提取名称为d列 map_dfr(~ .x %>% # 遍历第三层url分组,提取名称为et列 # 将数值向量命名为目标列名后转为行格式tibble map_dfr(~ set_names(.x, c("e", "v", "f")) %>% as_tibble_row(), .id = "et"), .id = "d"), .id = "source") %>% # 调整列顺序匹配你的预期输出 select(d, et, e, v, f, source)
代码说明
map_dfr会自动将遍历返回的结果按行合并为tibble,.id参数可以将对应层级的列表键名提取为指定列- 整个过程为矢量化运算,底层由C实现,即使嵌套列表包含数十万条数据也可以快速完成转换
- 如果你的数值向量长度不固定,可以把
as_tibble_row替换为as_tibble,再配合unnest处理即可
内容的提问来源于stack exchange,提问作者Андрей Буланкин
相关产品推荐
相关产品推荐

