R语言如何将两列数据框按id分组转换为命名向量列表
R实现分组生成指定格式向量列表的方案
你可以直接用以下两种常用方案实现需求,逻辑简单易维护:
方案1:Base R 原生实现(无依赖,推荐)
不需要安装任何第三方包,两行代码即可完成:
# 按id列拆分code列,生成分组列表 a_list <- split(df$code, df$id) # 按Tr+id的规则修改列表元素名称 names(a_list) <- paste0("Tr", names(a_list))
运行后生成的a_list和你给出的期望结构完全一致,可通过identical(a_list, list(Tr1 = c("a","b","c"), Tr2 = c("a","b")))验证,返回结果为TRUE。
方案2:tidyverse 工作流实现
如果你平时用dplyr处理数据,可以用以下适配tidyverse语法的写法:
library(dplyr) a_list <- df %>% # 按id分组 group_by(id) %>% # 把每组的code值聚合为列表列 summarise(code_vec = list(code), .groups = "drop") %>% # 将两列数据框转换为命名列表 tibble::deframe() %>% # 批量修改列表元素名 setNames(paste0("Tr", names(.)))
提示:如果id列存在非连续值、或者有缺失的id,上述两种方法都会自动适配实际存在的id生成对应列表项,不会产生多余的空元素。
内容的提问来源于stack exchange,提问作者yindalon
相关产品推荐
相关产品推荐

