使用dplyr查找列中的最大值,并从其他列返回元素

时间:2020-10-16 14:23:23

标签: r dataframe dplyr max

假设以下数据框:

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,我想获得与ab,c列中的每个最大值和最小值相对应的d元素:

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在重塑为“长”格式后,我们可以使用slice_max

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