根据R tidyverse中的另一列,选择重叠范围内的行



我有一个数据帧,它看起来像这样:
col1定义了方向为">+";而col2在方向为"0"时建立范围的开始-";。

library(tidyverse)
df <- tibble(col1=c(1,10,100,40,1000), col2=c(15,20,50,80,2000), 
direction=c("+","+","-","+","+"), score=c(50,100,300,10,300))
df 
#> # A tibble: 5 × 4
#>    col1  col2 direction score
#>   <dbl> <dbl> <chr>     <dbl>
#> 1     1    15 +            50
#> 2    10    20 +           100
#> 3   100    50 -           300
#> 4    40    80 +            10
#> 5  1000  2000 +           300

创建于2022-07-28由reprex包(v2.0.1(

通过考虑方向,我想从范围重叠的行中提取得分最高的行。

我希望我的数据看起来像这样。


#>    col1  col2 direction score
#>   <dbl> <dbl> <chr>     <dbl>
#> 1    10    20 +           100
#> 3   100    50 -           300
#> 5  1000  2000 +           300

任何想法和帮助都将不胜感激。

我们可以在"方向"上按rleid分组后使用slice_max

library(dplyr)
library(data.table)
df %>% 
group_by(grp = rleid(direction)) %>%
slice_max(n = 1, order_by = score) %>%
ungroup %>%
select(-grp)

-输出

# A tibble: 3 × 4
col1  col2 direction score
<dbl> <dbl> <chr>     <dbl>
1    10    20 +           100
2   100    50 -           300
3  1000  2000 +           300

最新更新