R 如何分组并获取具有X max的列Y的值?

R 如何分组并获取具有X max的列Y的值?,r,dataframe,dplyr,R,Dataframe,Dplyr,我有一个以前从未遇到过的用例。我有以下数据框,希望选择“y”的值,其中“x”分别达到条件“I”的每个级别的最小值和最大值 我该怎么做呢?我们可以使用slice library(dplyr) df %>% group_by(i) %>% slice(which.min(x)) %>% #or #slice(which.max(x)) %>% select(-x) 如果您愿意走出tidyverse的另一个选项是数据。表: setDT(df)

我有一个以前从未遇到过的用例。我有以下数据框,希望选择“y”的值,其中“x”分别达到条件“I”的每个级别的最小值和最大值


我该怎么做呢?

我们可以使用
slice

library(dplyr)
df %>% 
   group_by(i) %>% 
   slice(which.min(x)) %>%
   #or
   #slice(which.max(x)) %>%
   select(-x)

如果您愿意走出
tidyverse
的另一个选项是
数据。表

setDT(df)[, list(min = y[which.min(x)],
                 max = y[which.max(x)]), by = i]

#   i min max
#1: 1   a   b
#2: 2   c   d
库(plyr)
dfR基溶液:

output <- by(df, df[, "i"], with, {
  data.frame(i=i[1], min=y[which.min(x)], max=y[which.max(x)])
})
(我认为data.frame对于保留“y”的因子结构是必要的)

输出可以与
do.call(rbind,output)


我喜欢这个,因为它在依赖性和简单性方面是最容易/最接近我的OP用例的。
setDT(df)[, list(min = y[which.min(x)],
                 max = y[which.max(x)]), by = i]

#   i min max
#1: 1   a   b
#2: 2   c   d
     library(plyr)
     df <- data.frame(i=c(1,1,2,2),x=c(1.0,2.0,3.0,4.0),y=c('a','b','c','d'))
     ddply(df, .(i), summarise, Min=y[which.min(x)], Max=y[which.min(x)])
output <- by(df, df[, "i"], with, {
  data.frame(i=i[1], min=y[which.min(x)], max=y[which.max(x)])
})
> output
df[, "i"]: 1
  i min max
1 1   a   b
------------------------------------------------------------ 
df[, "i"]: 2
  i min max
1 2   c   d
> do.call(rbind, output)
  i min max
1 1   a   b
2 2   c   d