在R语言的dplyr中,基于多个列选择每个分组中具有最大值的行。

3

我的数据帧看起来像这样

library(tidyverse)

df1 <- tibble(col1= c("apple","apple","banana","banana"), 
              col2 = c("appl","aple","banan","bananb"),
              count_col1=c(1,1,4,4), count_col2=c(3,4,1,1))
df1
#> # A tibble: 4 × 4
#>   col1   col2   count_col1 count_col2
#>   <chr>  <chr>       <dbl>      <dbl>
#> 1 apple  appl            1          3
#> 2 apple  aple            1          4
#> 3 banana banan           4          1
#> 4 banana bananb          4          1

该内容由reprex包(v2.0.1)于2022-02-17创建

我想在按col1分组后,选择基于count_col1和count_col2的最大值的行。

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

      col1   col2   count_col1 count_col2
      apple  aple            1          4
      banana banan           4          1
      banana bananb          4          1

对于一列,您可以编写一些内容。

df1 %>% 
  slice(which.max(count_col1))

但不适用于两个对象

1个回答

4

我们可以使用 pmax 对 'count' 列进行逐行求最大值,并按 'col1' 进行分组,然后筛选出 'Max' 列的最大值所在的行。

library(dplyr)
df1 %>% 
 mutate(Max = pmax(count_col1, count_col2) ) %>%
 group_by(col1) %>%
 filter(Max == max(Max)) %>%
 ungroup %>%
 select(-Max)

-输出

# A tibble: 3 × 4
  col1   col2   count_col1 count_col2
  <chr>  <chr>       <dbl>      <dbl>
1 apple  aple            1          4
2 banana banan           4          1
3 banana bananb          4          1

我们还可以使用 slice_max
library(purrr)
df1 %>%
  group_by(col1) %>%
  slice_max(invoke(pmax, across(starts_with("count")))) %>%
  ungroup
# A tibble: 3 × 4
  col1   col2   count_col1 count_col2
  <chr>  <chr>       <dbl>      <dbl>
1 apple  aple            1          4
2 banana banan           4          1
3 banana bananb          4          1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接