在R中使用iCAMP将phylobin的ASV ID替换为bin.id.new生成pdid.bin
需求与解决方案
需求背景
使用R语言的iCAMP工具处理数据时,现有一个包含进化树分箱信息的大型列表phylobin,其中:
phylobin[["sp.bin"]]:行名为ASV ID,包含bin.id.new列(需替换为的目标整数值)phylobin[["bin.united.sp"]]:存储所有分箱及其对应ASV ID的列表
需要生成新的分箱列表pdid.bin,将原列表中的ASV ID替换为phylobin[["sp.bin"]]$bin.id.new对应的整数值。
数据快照
# phylobin[["sp.bin"]]前几行结构 > dput(head(phylobin[["sp.bin"]])) structure(list(bin.id.strict = 1:6, bin.id.united = c(5155L, 5155L, 5155L, 5155L, 5155L, 5155L), bin.id.new = c(1, 1, 1, 1, 1, 1)), row.names = c("58280213177cd49ae003f799669083b1", "49da809110cfb2291f15aa751868f909", "dda715fd5e83bd6706ccb377023a7b04", "d22c52adf22aaab347d1de64bc394ab4", "11e64c80d5ba65bae3e2061c1a71deeb", "ba2e725cf081c898027196308f0b9279" ), class = "data.frame") # phylobin[["bin.united.sp"]]前几行结构 > dput(head(phylobin[["bin.united.sp"]])) list(c("58280213177cd49ae003f799669083b1", "49da809110cfb2291f15aa751868f909", "dda715fd5e83bd6706ccb377023a7b04", "d22c52adf22aaab347d1de64bc394ab4", "11e64c80d5ba65bae3e2061c1a71deeb", "ba2e725cf081c898027196308f0b9279"))
解决方案
通过创建ASV-ID到bin.id.new的映射关系,再批量替换实现需求,代码如下:
# 1. 生成ASV ID到bin.id.new的命名向量映射 asv_to_bin <- phylobin[["sp.bin"]]$bin.id.new names(asv_to_bin) <- rownames(phylobin[["sp.bin"]]) # 2. 遍历原分箱列表,替换ASV ID为对应bin.id.new值 pdid.bin <- lapply(phylobin[["bin.united.sp"]], function(asv_ids) { asv_to_bin[asv_ids] })
代码说明
- 第一步生成的
asv_to_bin是命名向量,以ASV ID为名称,对应值为目标整数,可快速完成索引匹配 - 第二步用
lapply遍历原分箱列表的每个元素,直接通过向量索引替换得到新的分箱列表
内容的提问来源于stack exchange,提问作者Geomicro
相关产品推荐
相关产品推荐

