基于分组组合最小出现次数筛选数据行的技术问询
解决方案
你的需求是筛选同时满足以下两个条件的蛋白及其浓度数据:
- 每个
disease+status分组组合中,该蛋白的有效测量值(非缺失)至少有3例 - 该蛋白必须存在于所有
disease+status分组组合中
问题分析
你当前的代码先通过na.omit()删除缺失值,再按protein+disease+status分组筛选样本量≥3的记录,但这种方式无法确保同一个蛋白在所有分组组合中都满足样本量要求——比如zw在A+yes分组只有2个有效值,gc在B+no分组只有2个有效值,这两个蛋白不符合要求,但你的代码会保留它们其他符合条件的分组记录。
正确代码实现
library(dplyr) # 1. 计算每个蛋白在各分组组合中的有效样本数(排除缺失值) protein_valid_counts <- data %>% group_by(protein, disease, status) %>% summarise(valid_samples = sum(!is.na(concentration)), .groups = "drop") # 2. 筛选出所有分组组合都满足有效样本数≥3的蛋白 qualified_proteins <- protein_valid_counts %>% group_by(protein) %>% filter(all(valid_samples >= 3)) %>% pull(protein) %>% unique() # 3. 过滤原始数据,保留符合条件的蛋白及非缺失浓度值 data_subset <- data %>% filter(protein %in% qualified_proteins, !is.na(concentration))
代码说明
- 统计有效样本数:通过
sum(!is.na(concentration))计算每个分组的非缺失值数量,避免提前删除缺失值导致分组信息丢失 - 筛选合格蛋白:按蛋白分组后,用
all(valid_samples >=3)确保该蛋白在所有disease+status组合中都满足样本量要求 - 过滤最终数据:用合格蛋白列表过滤原始数据,同时保留非缺失的浓度记录
运行后,qualified_proteins仅包含xy,data_subset会保留所有xy的非缺失浓度数据,符合你的预期。
内容的提问来源于stack exchange,提问作者Osgarion
相关产品推荐
相关产品推荐

