r-根据另一列中的字符保持最小值或最大值



我有这个tbl:

Genes strand mode_position
1:   2L52.1      +          1638
2:   2L52.1      +          2096
3:   npr-30      +          3156
4:   homt-1      -          6081
5:  B0348.5      +          6383

如果有重复的基因,并且支架是+,我需要保留具有最高值的mode_position的行,如果-,则保留具有最低值的行。因此,对于2L52.1,它应该只保留第2行。我尝试了group_by(Genes) %>% if_else("strand" == "+", slice_max(mode_position, n=1)),但这显然不起作用,因为"条件"必须是一个逻辑向量。case_when对字符不起作用?还有其他选择吗?

谢谢!

您可以将if/elsewhich.maxwhich.min一起使用以获得最大和最小行。

library(dplyr)
df %>%
group_by(Genes) %>%
slice(if(all(strand == '+')) which.max(mode_position) 
else which.min(mode_position)) %>%
ungroup
#  Genes   strand mode_position
#  <chr>   <chr>          <int>
#1 2L52.1  +               2096
#2 B0348.5 +               6383
#3 homt-1  -               6081
#4 npr-30  +               3156

数据

df <- structure(list(Genes = c("2L52.1", "2L52.1", "npr-30", "homt-1", 
"B0348.5"), strand = c("+", "+", "+", "-", "+"), mode_position = c(1638L, 
2096L, 3156L, 6081L, 6383L)), class = "data.frame", row.names = c(NA, -5L))

相关内容

  • 没有找到相关文章

最新更新