【问题标题】:Finding max values in columns using dplyr and return element from different column使用 dplyr 查找列中的最大值并从不同列返回元素
【发布时间】:2020-10-17 02:35:13
【问题描述】:

假设以下数据框:

df<-data.frame(a=c("red", "blue", "yellow", "orange"), b=c(1,4,5,7), c=c(2,7,4,1), d=c(4,3,8,1))

使用dplyr,我想在b,cd列中获取与每个最大值和最小值对应的a元素:

对于最大值,这将返回 orange, blue and yellow

我能够获取 max 值的索引,但无法从列 a 获取值:

df %>% summarise(across(-c(1), ~which.max(.x)))

【问题讨论】:

    标签: r dataframe dplyr max


    【解决方案1】:

    试试这个。将数据重新整形为 long,然后按包含列的 name 变量分组。之后过滤以获取最大值并识别a 变量中的观察值。代码如下:

    library(tidyverse)
    #Code
    newdf <- df %>% pivot_longer(-a) %>% group_by(name) %>% filter(value==max(value))
    

    输出:

    # A tibble: 3 x 3
    # Groups:   name [3]
      a      name  value
      <fct>  <chr> <dbl>
    1 blue   c         7
    2 yellow d         8
    3 orange b         7
    

    【讨论】:

      【解决方案2】:

      我们可以使用slice_max 整形为'long'格式

      library(dplyr)
      library(tidyr)
      df %>% 
          pivot_longer(-a) %>% 
          group_by(name) %>% 
          slice_max(value)
      

      -输出

      # A tibble: 3 x 3
      # Groups:   name [3]
      #  a      name  value
      #  <chr>  <chr> <dbl>
      #1 orange b         7
      #2 blue   c         7
      #3 yellow d         8
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-26
        • 2021-02-15
        • 2021-10-10
        相关资源
        最近更新 更多