如何将R中嵌套List灵活转换为带合并列名的tibble?
解决方案
不管是单个嵌套列表还是多个子列表组成的列表,都可以用tibble + tidyr::unnest_wider的组合实现自动扁平化,且无需依赖固定列名:
场景1:单个嵌套列表转1行tibble
library(tibble) library(tidyr) # 定义单个嵌套列表 my_list <- list(id = 1, name = list(first = "Jack", last = "Smith"), qualified = TRUE) # 转换为目标tibble tibble(data = list(my_list)) %>% unnest_wider(data, names_sep = "_")
输出结果:
# A tibble: 1 × 4 id name_first name_last qualified <dbl> <chr> <chr> <lgl> 1 1 Jack Smith TRUE
场景2:多个子列表转多行tibble
# 定义包含多个子列表的列表 my_list2 <- list( list(id = 1, name = list(first = "Jack", last = "Smith"), qualified = TRUE), list(id = 2, name = list(first = "John", last = "Adams"), qualified = TRUE) ) # 转换为目标tibble tibble(data = my_list2) %>% unnest_wider(data, names_sep = "_")
输出结果:
# A tibble: 2 × 4 id name_first name_last qualified <dbl> <chr> <chr> <lgl> 1 1 Jack Smith TRUE 2 2 John Adams TRUE
核心逻辑说明
- 先将目标列表(单个或多个)放入tibble的单列中,统一处理逻辑;
unnest_wider会自动识别列表中的嵌套结构,将所有层级展开为独立列;names_sep = "_"参数自动用下划线拼接嵌套层级的名称,生成name_first这类符合要求的列名;- 无论列表字段名、嵌套层级如何变动,代码无需修改即可适配,完全满足“不依赖固定列名”的要求。
内容的提问来源于stack exchange,提问作者Rodrigo Salvador
相关产品推荐
相关产品推荐

