Чтобы отсортировать одномерный вектор или один столбец данных, просто вызовите функцию sort и передайте свою последовательность.
С другой стороны, функция order необходима для сортировки данных двух -мерных данных, т.е. нескольких столбцов данных, собранных в матрице или фрейм данных.
Stadium Home Week Qtr Away Off Def Result Kicker Dist
751 Out PHI 14 4 NYG PHI NYG Good D.Akers 50
491 Out KC 9 1 OAK OAK KC Good S.Janikowski 32
702 Out OAK 15 4 CLE CLE OAK Good P.Dawson 37
571 Out NE 1 2 OAK OAK NE Missed S.Janikowski 43
654 Out NYG 11 2 PHI NYG PHI Good J.Feely 26
307 Out DEN 14 2 BAL DEN BAL Good J.Elam 48
492 Out KC 13 3 DEN KC DEN Good L.Tynes 34
691 Out NYJ 17 3 BUF NYJ BUF Good M.Nugent 25
164 Out CHI 13 2 GB CHI GB Good R.Gould 25
80 Out BAL 1 2 IND IND BAL Good M.Vanderjagt 20
Вот отрывок данных для попыток достижения цели в сезоне НФЛ 2008, фрейм данных, который я назвал «fg». предположим, что эти 10 точек данных представляют все цели, достигнутые в 2008 году; далее предположим, что вы хотите узнать расстояние до самой длинной цели в этом году, кто ее выбил, и было ли это хорошо или нет; вы также хотите знать второго по длине, а также третьего по продолжительности и т. д .; и, наконец, вы хотите самую короткую попытку достижения цели.
Ну, вы могли бы просто сделать это:
sort(fg$Dist, decreasing=T)
, который возвращает: 50 48 43 37 34 32 26 25 25 20
Это правильно, но не очень полезно - оно говорит нам расстояние от самой длинной попытки полевого гола, второй-самой длинной, ... а также самой короткой; однако, но это все, что мы знаем - например, мы не знаем, кто был кикером, была ли попытка успешной и т. д. Конечно, нам нужен весь фрейм данных, отсортированный по столбцу «Dist» (другими словами, мы хотите отсортировать все строки данных по одному атрибуту Dist .
это будет выглядеть так:
Stadium Home Week Qtr Away Off Def Result Kicker Dist
751 Out PHI 14 4 NYG PHI NYG Good D.Akers 50
307 Out DEN 14 2 BAL DEN BAL Good J.Elam 48
571 Out NE 1 2 OAK OAK NE Missed S.Janikowski 43
702 Out OAK 15 4 CLE CLE OAK Good P.Dawson 37
492 Out KC 13 3 DEN KC DEN Good L.Tynes 34
491 Out KC 9 1 OAK OAK KC Good S.Janikowski 32
654 Out NYG 11 2 PHI NYG PHI Good J.Feely 26
691 Out NYJ 17 3 BUF NYJ BUF Good M.Nugent 25
164 Out CHI 13 2 GB CHI GB Good R.Gould 25
80 Out BAL 1 2 IND IND BAL Good M.Vanderjagt 20
Это то, что делает order . Это 'sort' для двумерных данных; другими словами, он возвращает 1D целочисленный индекс, состоящий из номеров строк, так что сортировка строк в соответствии с этим вектором даст вам правильную ориентированную на строки сортировку по столбцу, Dist
Вот как это работает. Выше sort использовался для сортировки столбца Dist; чтобы отсортировать весь фрейм данных в столбце Dist, мы используем 'order' точно так же, как 'sort' используется выше :
ndx = order(fg$Dist, decreasing=T)
(я обычно связываю массив, возвращенный из 'order', с переменной 'ndx', которая стоит
для «индекса», потому что я собираюсь использовать его как массив индекса для сортировки.)
это был шаг 1, вот шаг 2:
'ndx', то, что возвращает 'sort', затем используется в качестве индексного массива для переупорядочения кадра данных, 'fg':
fg_sorted = fg[ndx,]
fg_sorted - это переупорядоченный фрейм данных сразу выше.
В сумме «sort» используется для создания индексного массива (который определяет порядок сортировки столбца, который вы хотите отсортировать), который затем используется в качестве индексного массива для переупорядочения информационного кадра (или матрицы).