如何将三列tibble转换为指定结构的嵌套列表?
tibble 转换为指定结构嵌套列表的实现方法
方法1:tidyverse 生态实现(适合已经在使用dplyr的场景)
你已经加载了dplyr,只需要额外搭配tidyr、purrr的两个常用函数即可实现:
library(dplyr) library(tidyr) library(purrr) res <- df %>% # 按a、b分组,将同组的c值合并为向量 group_by(a, b) %>% summarise(c = list(c), .groups = "drop") %>% # 按a分组,将b作为键、对应c向量作为值生成内层列表 group_by(a) %>% summarise(inner = list(deframe(tibble(b, c)))) %>% # 生成最外层的命名列表 deframe()
运行后str(res)的输出如下,和你要求的结构完全一致:
List of 1 $ a1:List of 2 ..$ b1: int [1:2] 1 2 ..$ b2: int [1:2] 1 2
方法2:Base R 实现(无需依赖第三方包)
如果不想加载额外包,可以用原生的split函数处理:
# 按a、b的组合拆分c列 split_c <- split(df$c, interaction(df$a, df$b, sep = "|")) # 分层组装嵌套列表 res <- lapply(split(names(split_c), sapply(strsplit(names(split_c), "\\|"), `[`, 1)), function(keys) { inner_keys <- sapply(strsplit(keys, "\\|"), `[`, 2) setNames(split_c[keys], inner_keys) })
内容的提问来源于stack exchange,提问作者Liam Wright
相关产品推荐
相关产品推荐

