当前位置: 首页 > 知识库问答 >
问题:

根据R dplyr中的多列选择每组中具有最大值的行

叶浩荡
2023-03-14

我的数据框就像这个

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创建

我想在grouping_bycol1之后根据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个答案

梁学真
2023-03-14

我们可以使用pmax获得“count”列的行最大值,按“col1”分组,filter“Max”列的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
 类似资料:
  • 问题内容: 好的,因此我对其他解决方案没有任何帮助。所以这就是我想要做的。我需要选择多列的行,其中一列的值是最大值。 这是样本数据 我需要选择整行,其中orderfileid是每个唯一商品编号的最大值 返回的数据集应该看起来像 我想我尝试过可以想到的select max(orderfileid)的每种组合 任何帮助都将被申请。谢谢 问题答案: 您需要在子查询中找到MAX值,然后使用这些结果将其连接

  • 在oracle DB中检索具有大组最大值的行时遇到问题。 我的桌子看起来是这样的: id,col1,col2,col3,col4,col5,date_col 谢谢你的提示! 干杯

  • 问题内容: 我有一张交易数据表,这些数据是对未来的预测。因此,随着时间的流逝和重新发送的预测变得更加准确,可以多次读取由相同日期,类型,位置和产品标识的相同预测。 我想创建一个查询,将相同类型,相同位置,产品和日期的交易分组,然后从这些分组中仅选择具有最新时间戳的交易。 该表现在有成千上万的行,随着时间的流逝,数百万行,因此,一个合理有效的解决方案将不胜感激:) 表格示例: 理想的结果: 我尝试例

  • 问题内容: 我已经看到了很多解决此类问题的解决方案尤其是此SQL仅选择在Column上具有Max Value的行,但是似乎没有一个合适的解决方案: 我有以下表格布局,即附件的版本控制,这些附件绑定到实体: 输出应该是最大版本号,按group_id和Entity_id分组,如果有帮助,我只需要一个单个entity_id的列表即可: 我想出的是这种自我加入: 但是,只有在不同的实体不共享相同的组号的情

  • 我有以下表在PostgreSQL 11. 我想得到具有col1,col2,col3和col4的不同值的行,如果col1,col2,col3相同,则取col1的第一个值。 期望的输出是: 我试着回答以下问题。 如何将输出限制为每col2,col3.获得一个col1值。。例如,选择col1值:3876,不包括3924。

  • 问题内容: 这应该是一个简单的问题,但我无法使其起作用:( 如何按另一列分组选择具有最大列值的行? 例如, 我有以下表格定义: 现在的问题是,我想先按结果分组,然后再从每组中选择一行,具体取决于哪一组具有最高的。 我试过了 但是,与其以正确的方式回报我,不如以同一个小组中最早的回报我。 有任何想法吗? 问题答案: 我本人为此进行了很多次努力,解决方案是以不同的方式考虑您的查询。 我希望其中具有该D