You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中构建CDR3序列计数矩阵:多样本数据合并方法求助

在R中合并多样本CDR3克隆计数为矩阵的解决方案

你现在的需求其实是典型的宽表转换+缺失值填充问题,完全不用手动写循环处理,不管是你已经加载的工具包,还是通用的数据处理工具,都有现成的方法可以快速实现!下面给你几种不同的方案,挑你顺手的来:

方案1:用immunarch内置函数(最省心,适配你的场景)

你已经加载了immunarch,这个包本身就是专门处理免疫组库数据的,内置的repMatrix函数可以直接生成你要的计数矩阵,完全不用自己处理去重和匹配的步骤:

# 你已经用repLoad加载了数据,immdata$data就是每个样本的data.frame列表
# 直接生成计数矩阵:.method="count"指定用克隆数,.col="aa"指定用CDR3氨基酸序列作为行
count_matrix <- repMatrix(immdata$data, .method = "count", .col = "aa")

# 最后把CDR3序列设为行名,去掉多余的列
rownames(count_matrix) <- count_matrix$CDR3.aa
count_matrix <- count_matrix[, -which(colnames(count_matrix) == "CDR3.aa")]

这个方法最直接,后续如果还要做克隆重叠分析、多样性计算,也能直接基于这个矩阵继续用immunarch的函数处理。

方案2:用tidyverse工具包(灵活通用,适合各类表格转换)

如果你习惯用tidyverse的语法,先把所有样本的数据合并成一个长表,再转成宽表并自动填充0:

首先确保加载tidyverse(如果没装先运行install.packages("tidyverse")):

library(tidyverse)

然后处理你的数据:

# 把所有样本的data.frame按行合并,自动保留样本ID作为新列
all_combined <- bind_rows(all.c, .id = "Sample.ID")

# 转换为宽表,没有匹配到的序列计数直接填充为0,最后把CDR3设为行名
count_matrix <- all_combined %>%
  pivot_wider(names_from = Sample.ID, values_from = Clones, values_fill = 0) %>%
  column_to_rownames(var = "CDR3.aa")

这个方法的优势是语法清晰,不管是免疫组库数据还是其他类型的多样本计数数据,都能用这套逻辑处理。

方案3:用你已加载的plyr包(无需额外安装)

如果你不想新加工具包,用你已经加载的plyr也能搞定,步骤稍微多一点但兼容性好:

# 合并所有样本数据为一个长表,保留样本ID
all_combined <- ldply(all.c, data.frame, .id = "Sample.ID")

# 转换为宽表格式
count_matrix <- reshape(all_combined, idvar = "CDR3.aa", timevar = "Sample.ID", direction = "wide")

# 清理列名(去掉自动生成的"Clones."前缀),并把NA替换为0
colnames(count_matrix) <- str_remove(colnames(count_matrix), "Clones.")
count_matrix[is.na(count_matrix)] <- 0

# 设置行名并去掉多余列
rownames(count_matrix) <- count_matrix$CDR3.aa
count_matrix <- count_matrix[, -which(colnames(count_matrix) == "CDR3.aa")]

内容的提问来源于stack exchange,提问作者Lou_A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:57:59