R语言:如何筛选仅含topological domain的RNAseq序列数据集?
筛选仅含topological domain的序列记录
问题背景
RNAseq分析后得到数据集,其中Sequence Name对应两种类型:topological domain和transmembrane region。需要筛选出仅包含topological domain的序列,移除同时存在两种类型的序列。
原代码尝试用dplyr::filter()筛选类型,但无法处理同一序列对应多类型的情况:
TMHMM_filter <- filter(TMHMM.df, TMHMM.df$Type %in% c("topological domain", "transmembrane domain")) head(TMHMM_filter)
这段代码仅移除了transmembrane region记录,但保留了同时包含两种类型的Sequence Name对应的topological domain条目,不符合需求。
原始数据集示例:
Name Sequence Name Type Minimum Maximum Length # Intervals 1 Cytoplasmic (potential) XP_009600001.1 topological domain 1 743 743 1 2 Cytoplasmic (potential) XP_009600003.1 topological domain 1 623 623 1 3 Cytoplasmic (potential) XP_009600004.1 topological domain 360 475 116 1 4 Transmembrane (potential) XP_009600004.1 transmembrane region 339 359 21 1 5 Extracellular (potential) XP_009600004.1 topological domain 155 338 184 1 6 Transmembrane (potential) XP_009600004.1 transmembrane region 134 154 21 1
期望输出:
Name Sequence Name Type Minimum Maximum Length # Intervals 1 Cytoplasmic (potential) XP_009600001.1 topological domain 1 743 743 1 2 Cytoplasmic (potential) XP_009600003.1 topological domain 1 623 623 1
解决方案
核心思路:先找出所有从未出现过transmembrane region类型的Sequence Name,再筛选这些序列对应的topological domain记录。
方法1:分步实现
library(dplyr) # 1. 筛选出仅含topological domain的序列名称 valid_seq_names <- TMHMM.df %>% group_by(`Sequence Name`) %>% summarise(has_transmembrane = any(Type == "transmembrane region")) %>% filter(!has_transmembrane) %>% pull(`Sequence Name`) # 2. 提取目标记录 TMHMM_filter <- TMHMM.df %>% filter(`Sequence Name` %in% valid_seq_names, Type == "topological domain") head(TMHMM_filter)
方法2:链式紧凑写法
library(dplyr) TMHMM_filter <- TMHMM.df %>% group_by(`Sequence Name`) %>% filter(!any(Type == "transmembrane region"), Type == "topological domain") %>% ungroup()
代码说明
- 分组统计:按
Sequence Name分组后,用any(Type == "transmembrane region")判断该序列是否存在跨膜区域类型。 - 筛选有效序列:保留无跨膜区域的序列,再提取这些序列对应的
topological domain条目。 - 链式写法直接在分组内完成筛选,无需单独提取序列名称列表,代码更简洁。
内容的提问来源于stack exchange,提问作者Luigi
相关产品推荐
相关产品推荐

