首页 > 解决方案 > 如何选择r中col的最高值

问题描述

我有一个具有重复行的数据框。我想删除重复的行并为每个 sample_id 选择具有每个计数最大值的 col 的行。我怎样才能做到这一点?

示例数据(来自评论):

structure(list(gene_id = c("ENSG00000000003", "ENSG00000000003", 
"ENSG00000000003", "ENSG00000000003", "G00000000003", "G00000000003", 
"G00000000003", "G00000000003", "G00000000003", "G00000000003"
), DO221539 = c(681L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), DO221540 = c(148L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), DO221541 = c(650L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L), DO221542 = c(258L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L), DO221543 = c(57L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L), DO221544 = c(224L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L), DO221545 = c(60L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), DO221546 = c(161L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), DO224575 = c(15L, 0L, 0L, 
0L, 0L, 949L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA, 
-10L))

我希望输出是

structure(list(gene_id = c("ENSG00000000003") ,DO221539 = 681L,DO221540 = 148L ,DO221541 = 650L, DO221542 = 258L , DO221543 = 57L, DO221544 = 224L, DO221545 = 60L, DO221546 = 61L, DO224575 = 949L, class = "data.frame", row.names = c(NA, -10L))

标签: r

解决方案


我们可以按“gene_id”分组并获取max每列的summarise_all

library(tidyverse)
df1 %>% 
   group_by(gene_id) %>% 
   summarise_all(max)

推荐阅读