如何筛选至少2个重复样本中reads数>10的基因?
基因表达数据筛选:保留至少2个样本reads数>10的基因
原代码的核心问题是筛选条件设置为NumExpressedgenes>0,仅要求至少1个样本满足reads>10。要实现至少2个样本的筛选需求,只需修改最后一步的判断条件:
修改后的代码
# 标记每个基因在各样本中是否满足reads>10 Expressedgenes = counts > 10 # 统计每个基因满足条件的样本数量 NumExpressedgenes = apply(Expressedgenes, 1, sum) # 筛选出满足条件的样本数≥2的基因 FilteredCounts = counts[NumExpressedgenes >= 2, ]
代码说明
- 第一步
Expressedgenes = counts > 10:生成布尔矩阵,TRUE表示对应基因在该样本中reads数大于10,FALSE则相反。 - 第二步
apply(Expressedgenes, 1, sum):按行(基因维度)求和,得到每个基因有多少个样本满足reads>10的条件。 - 第三步将筛选条件从
>0改为>=2,确保只保留在2个及以上样本中reads数超过10的基因。
补充:针对分组重复样本的筛选(若需要)
如果你的“重复样本”指的是同一实验分组内的生物学重复(比如胰腺组、肺组各自的重复),需要结合PancreasLungDesign的分组信息,针对每个分组单独统计:
# 假设PancreasLungDesign的Group列是分组标识 group_labels = PancreasLungDesign$Group # 按分组拆分样本,对每个分组内的基因统计满足reads>10的重复数 group_expressed = lapply(unique(group_labels), function(g) { # 提取当前分组的样本计数 group_counts = counts[, group_labels == g] # 统计每个基因在该分组中满足条件的样本数≥2 apply(group_counts > 10, 1, sum) >= 2 }) # 合并结果:保留至少一个分组内满足条件的基因 keep_genes = rowSums(do.call(cbind, group_expressed)) >= 1 FilteredCounts = counts[keep_genes, ]
内容的提问来源于stack exchange,提问作者Luca Rinaldi
相关产品推荐
相关产品推荐

