如何在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
相关产品推荐
相关产品推荐

