Я нашел ответ (сейчас deleted) на this question, и мне любопытно, почему он не работает.возвращать строки с максимальным/минимальным значением столбца по группам, используя plyr :: ddply
Вопрос: возвращает строку, соответствующую минимальному значению, по группе.
Так, например, учитывая набор данных:
df <- data.frame(State = c(rep('AK',4),rep('RI',4)),
Company = LETTERS[1:8],
Employees = c(82L, 104L, 37L, 24L, 19L, 118L, 88L, 42L))
... правильный ответ:
State Company Employees
1: AK D 24
2: RI E 19
, как можно получить, например,
library(data.table); setDT(df)[ , .SD[which.min(Employees)], by = State]
Мой вопрос, почему эта команда plyr::ddply
не работа:
library(plyr)
ddply(df, .(State), summarise, Employees=min(Employees),
Company=Company[which.min(Employees)])
# returns:
# State Employees Company
# 1 AK 24 A
# 2 RI 19 E
Другими словами, почему which.min(Employees)
возвращение 1 для каждой группы, а c(4,1)
? Обратите внимание, что за пределами ddply
, это работает:
summarise(df, minEmp = min(Employees), whichMin = which.min(Employees))
# minEmp whichMin
# 1 19 5
Я не использую plyr
много, но я хотел бы знать, как правильно это сделать, если есть разумные один.
@hrbrmstr Я видел, как ты ответил на мой комментарий, но потом он исчез - просто любопытно, что правильный способ сделать это с помощью 'plyr' бы ... – C8H10N4O2