Я хочу суммировать df по группам, используя несколько функций. Данные репликации:
library(dplyr)
df1 <- data.frame(a=c('a', 'a', 'b', 'b', 'c', 'c'), b=c(1,NA,3,2,2,1), c=c(1,3,5,5,2,4))
Одной из них является пользовательская функция, которая запрашивает значение df1$b
, когда max(df1$c)
в каждой группе (df1$a
). Когда результат равен NA
, он должен вернуть значение для df1$b
для второго по величине значения df1$c
. Следующие работы:
namax <- function(x,y) ifelse(is.na(y[x==max(x)] & length(x)>1),
y[x==sort(x,partial=length(x)-1)[length(x)-1]], y[x==max(x)])
Затем я пытаюсь суммировать df1
, используя:
df2 <- df1 %>%
dplyr::group_by(a) %>%
summarise(meanc = mean(c),
maxc = namax(c,b))
, который возвращает следующее, потому что для df$a == 'b'
происходит максимальное значение df1$c
дважды для разных значений df1$b
.
Ошибка: столбец 'max c' должен иметь длину 1 (суммарное значение), а не 2
Существует ли элегантное решение, посредством которого dplyr возвращает оба значения , одновременно выполняя другой вызов summarise()
(например, добавив do()
к вызову group_by
)? В моем случае я пытаюсь выполнить несколько разных вызовов на summarise
, кроме звонка с использованием функции namax
.