R语言group_split列表表格批量处理及taxon样本丰度长表转宽问题
最优解决方案
直接使用tidyr提供的pivot_wider长表转宽表函数,无需拆分表格,一行代码即可完成需求,适配任意数量的样本和分类单元,分类单元集合不一致时缺失值会自动填充为NA:
library(tidyverse) data_final <- data %>% pivot_wider( id_cols = samp_id, names_from = taxon, values_from = least )
输出结果第一列为samp_id(样本编号),其余列均为分类单元名称,每行对应一个样本的所有分类单元丰度值,完全符合你要求的输出格式。
基于现有group_split逻辑的实现方案
如果你想沿用已拆分的data_split对象完成后续处理,可通过purrr::map批量处理每个分组的tibble,无需手动指定任何样本ID:
data_final <- data_split %>% # 批量重命名每个分组的丰度列为对应样本ID map(~{ samp_name <- .x$samp_id[1] .x %>% select(taxon, least) %>% rename(!!samp_name := least) }) %>% # 全连接合并所有分组 reduce(full_join, by = "taxon") %>% # 转置为样本为行、分类单元为列的格式 column_to_rownames("taxon") %>% t() %>% as.data.frame() %>% rownames_to_column("samp_id")
方案说明
优先推荐第一种pivot_wider方案,执行效率远高于拆分再合并的逻辑,代码更简洁易维护,针对上百个样本的大表格也能稳定运行。
内容的提问来源于stack exchange,提问作者Maho
相关产品推荐
相关产品推荐

