假设以下数据框:
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
,我想获得与a
和b,c
列中的每个最大值和最小值相对应的d
元素:
对于最大值,这将返回orange, blue and yellow
我能够获取max
值的索引,但是无法从列a
中获取值:
df %>% summarise(across(-c(1), ~which.max(.x)))
答案 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