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

如何在R语言中实现基础及进阶版列表结构转换?

问题2:嵌套列表重组(进阶版)

输入列表:

x <-  list(id = c("a", "b", "a"), key = c("foo", "foo", "bar"), value = c(1, 2, 3))

需要转换为:

y <- list(a = list(foo = 1, bar = 3), b = list(foo = 2))

注:原目标示例中a的bar值应为3,对应输入的第三个元素

实现方式

基础R方案

通过拆分数据框,再按key为子列表命名:

df <- as.data.frame(x)
# 按id拆分数据框
id_groups <- split(df, df$id)
# 每个id组内,将value按key命名后转成列表
y <- lapply(id_groups, function(group) {
  set_names(as.list(group$value), group$key)
})

tidyverse方案(dplyr + purrr)

用分组拆分+deframe快速构建键值对:

library(dplyr)
library(purrr)

y <- as.data.frame(x) %>%
  # 按id分组拆分
  group_split(id, .keep = FALSE) %>%
  # 用每个组的id作为列表名称
  set_names(map(., ~first(.$id))) %>%
  # 把key和value转成键值对列表
  map(~deframe(.) %>% as.list())

内容的提问来源于stack exchange,提问作者Felix M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:07:27