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

如何将三列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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:54:04