с какой функцией .max - PullRequest
       6

с какой функцией .max

0 голосов
/ 24 сентября 2018

Вы можете мне помочь: для каждого идентификатора я хочу извлечь наибольшее значение "a", которое имеет наибольшее значение "b".Другими словами, я хочу просмотреть значения «b», определить самые высокие (здесь b = 40).Если несколько «a» имеют одинаковое наибольшее значение «b» (здесь a = 20 и a = 30), тогда я хочу выбрать наибольшее значение «a» (здесь a = 30).

Здесьчто я сделал до сих пор:

df<- data.frame(ID=c('1','1','1','1','1','1'), a=c('10','20','30','10','2','30'), b=c('10','20','30','10','40', "40"))

library(plyr)

opt <- ddply(df,.(ID),summarise,
             a=a[which.max(b)])
opt

ID a
1  2

но я не получаю:

ID a
1  30

Я был бы очень признателен за ваши предложения.Обратите внимание, что в отличие от этого примера набора данных, фактический набор данных, над которым я работаю, довольно большой.Большое спасибо!

1 Ответ

0 голосов
/ 24 сентября 2018

Мы можем использовать dplyr, arrange b и a в desc в конечном порядке по группам (ID) и затем получить первый ряд каждой группы.

library(dplyr)
df %>%
  group_by(ID) %>%
  arrange(desc(b), desc(a)) %>%
  slice(1)

#   ID    a     b    
#  <fct> <fct> <fct>
#1  1     30    40 

Как показано в ожидаемом результате, если нам нужны только столбцы ID и a, мы можем просто select их

df %>%
  group_by(ID) %>%
  arrange(desc(b), desc(a)) %>%
  slice(1) %>%
  select(ID, a)

Мы также можем arrange их в порядке возрастания изатем выберите последнюю строку, используя n()

library(dplyr)
df %>%
  group_by(ID) %>%
  arrange(b, a) %>%
  slice(n()) %>%
  select(ID, a)
...