R语言中如何按分组条件删除特定重复的基因数据行
基因数据集过滤去重实现方案
核心逻辑说明
我们需要同时验证两个删除条件:
- 目标基因在≥2个不同分组中存在
- 该基因当前所在的分组仅包含它1个基因
同时满足两个条件的行才需要删除。
修正后的dplyr实现代码
原代码错误点:mutate()中不能直接嵌套filter(),分组逻辑也拆分错误,正确实现如下:
library(dplyr) df %>% # 计算每个基因出现在多少个不同分组 group_by(Gene) %>% mutate(gene_occur_group = n_distinct(Group)) %>% ungroup() %>% # 计算每个分组包含多少个基因 group_by(Group) %>% mutate(group_gene_count = n()) %>% ungroup() %>% # 过滤掉符合删除条件的行 filter(!(gene_occur_group > 1 & group_gene_count == 1)) %>% # 可选:删除过程辅助列 select(-gene_occur_group, -group_gene_count)
运行结果
输出符合要求的过滤后数据:
Group Gene 1 1 Gene1 2 1 Gene2 3 1 Gene3 4 2 Gene3 5 2 Gene4 6 4 Gene10 7 4 Gene11
可选:data.table简洁实现
你的原始数据集本身是data.table类,直接用data.table语法执行效率更高:
library(data.table) setDT(df) df[!(df[, .(gene_occur_group = uniqueN(Group)), by = Gene][gene_occur_group > 1, Gene] %in% df[, .SD[.N == 1], by = Group]$Gene), ]
内容的提问来源于stack exchange,提问作者LN3
相关产品推荐
相关产品推荐

