Я думаю, у @prosoitos уже есть отличный ответ.Я просто хотел проиллюстрировать, почему существует функция reorder
и как она полезна.
Упорядочение групп на графике
Давайте рассмотрим классический iris
набор данных
> data(iris)
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
и предположим, что мы хотим построить значения Sepal.Width
, сравнивая их по Species
boxplot(Sepal.Width ~ Species, iris)

, но порядок здесь по названию вида, тогда как мы думаем, что графикбудет выглядеть лучше, если мы упорядочим по средней ширине чашелистика каждого вида.И вот где reorder
- быстрое и мощное решение для этого:
iris$Species <- reorder(iris$Species, iris$Sepal.Width, FUN=mean)
boxplot(Sepal.Width ~ Species, iris)

Здесь произошло то, что значения iris$Sepal.Width
соответствуют каждому уровню в iris$Species
к ним была применена функция mean
, а результат был присоединен к фактору в виде атрибута scores
:
> attr(iris$Species, 'scores')
setosa versicolor virginica
3.428 2.770 2.974
Эти баллы затем использовались для ранжирования (в порядке возрастания) уровней вфактор и назначьте им этот порядок:
> levels(iris$Species)
[1] "versicolor" "virginica" "setosa"
Обратите внимание, что это не меняет порядок каких-либо из данных в кадре данных, а только порядок используемых кодовв фактор.Аргумент FUN
делает функцию reorder
достаточно общей, так что можно упорядочить по минимальным или максимальным значениям или любую другую функцию, которую вы хотите вычислить для сгруппированных данных.
В целом, я думаю, что ключевая вещьзаключается в том, что второй аргумент в функции reorder
, который считался желаемым порядком, предназначен для ввода весов или значений, связанных с каждой записью в факторе.