Если вы после даты, соответствующей строке (ов) со значениями макс, попробуйте subset
, чтобы получить ряд макс вместе с select
, чтобы получить столбцы вы после этого.
# reproducible example using `iris`
# your original
ddply(iris, ~Species, summarise, max=max(Sepal.Length))
# Species max
# 1 setosa 5.8
# 2 versicolor 7.0
# 3 virginica 7.9
# now we want to get the Sepal.Width that corresponds to max sepal.length too.
ddply(iris, ~Species, subset, Sepal.Length==max(Sepal.Length),
select=c('Species', 'Sepal.Length', 'Sepal.Width'))
# Species Sepal.Length Sepal.Width
# 1 setosa 5.8 4.0
# 2 versicolor 7.0 3.2
# 3 virginica 7.9 3.8
(Или вместо того, чтобы использовать select
в subset
вызова, просто использовать [, c('columns', 'I', 'want')]
после ddply
). Если для тех же самых видов, которые достигают максимума, существует несколько строк, это вернет их все.
Вы можете использовать summarise
сделать это тоже, просто добавить date
определение в вызове, но это немного менее эффективным (вычисление макс дважды):
ddply(iris, ~Species, summarise,
max=max(Sepal.Length),
width=Sepal.Width[which.max(Sepal.Length)])
Это будет возвращать только одну строку для каждого вида , и если есть несколько цветов с максимальной длиной спала для их видов, возвращается только первый (which.max
возвращает первый из соответствующих индексов).
работал отлично. спасибо за несколько решений. Для дальнейшего использования, это то, что я в конечном итоге выбрал. ddply (dd, ~ group, subset, value == max (value), select = c ('date2', 'value')) – SilvanD