R语言dplyr如何提取分组后含最小start与最大end的完整唯一行
解决方法
你可以用分组后筛选行的逻辑替代summarize汇总逻辑,就能保留全部原字段:
library(dplyr) result <- data %>% # 按seqname分组 group_by(seqname) %>% # 筛选当前组内start为最小值、end为最大值的行 filter(start == min(start), end == max(end)) %>% # 若同一分组下存在多行同时满足条件,可加下行保留第一条,也可按需求自定义排序后取行 slice_head(n = 1) %>% # 解除分组,方便后续处理 ungroup()
补充说明
如果更习惯用你原来的summarize思路,也可以通过左连接关联回原表实现:
result <- data %>% group_by(seqname) %>% summarize(min_start = min(start), max_end = max(end), .groups = "drop") %>% left_join(data, by = c("seqname" = "seqname", "min_start" = "start", "max_end" = "end")) %>% # 处理同一seqname匹配到多行的情况,保留第一行 distinct(seqname, .keep_all = TRUE)
如果有多个符合条件的行需要指定优先级,可以在筛选后加arrange()按你需要的字段排序(比如要选score最小的就加arrange(score)),再取第一行即可。
内容的提问来源于stack exchange,提问作者Enset
相关产品推荐
相关产品推荐

