R语言:如何将dataframe的ID与RE两列转换为按ID分组的命名list
两列数据框转分组命名列表的实现方法
方法1:base R原生实现(无需第三方依赖)
直接使用内置split()函数完成分组拆分,完整可运行代码:
# 构造示例数据框(R版本低于4.0时需补充stringsAsFactors = FALSE参数,避免字符被自动转为因子类型) df <- data.frame( ID = c("am_A", "am_A", "am_B", "am_C", "am_B", "am_C"), RE = c("re456", "re4", "re20", "re47", "re456", "re12") ) # 按ID列分组,拆分RE向量为命名列表 result <- split(df$RE, df$ID)
输出结构完全匹配目标格式:列表元素以对应ID为名称,元素内容为匹配ID下的所有RE值组成的字符向量。
如果需要去除每个分组内的重复RE值,可追加一行去重处理:
# 每个分组内RE值去重 result <- lapply(result, unique)
方法2:tidyverse语法实现(适配日常分析流程)
使用dplyr、tibble工具链的写法可读性更高,适合和其他分析步骤串联:
# 加载依赖包 library(dplyr) library(tibble) # 按ID聚合RE值,转换为目标格式的命名列表 result <- df %>% group_by(ID) %>% summarise(RE_vec = list(RE)) %>% deframe()
需要去重时仅需在list()内嵌套unique()即可:
# 带分组内去重的版本 result <- df %>% group_by(ID) %>% summarise(RE_vec = list(unique(RE))) %>% deframe()
两种方法的选择参考:
- base R 方法无额外依赖,脚本可移植性最强,适合在无法安装第三方包的运行环境使用
- tidyverse 方法语法和多数日常数据分析流程统一,后续扩展处理逻辑更顺畅
内容的提问来源于stack exchange,提问作者Julie Hardy
相关产品推荐
相关产品推荐

