Понимание функции order()
Я пытаюсь понять, как order()
функция работает. У меня сложилось впечатление, что он вернул перестановку индексов, которые при сортировке будут сортировать исходный вектор.
например,
> a <- c(45,50,10,96)
> order(a)
[1] 3 1 2 4
Я ожидал, что это вернется c(2, 3, 1, 4)
, так как список отсортированных будет 10 45 50 96.
кто-нибудь может помочь мне понять, возвращаемое значение этой функции?
6 ответов:
этой кажется, это объясняет.
определение
order
Этоa[order(a)]
в увеличение порядка. Это работает с вашим примером, где правильно порядок четвертый, второй, первый, затем третий элемент.возможно, вы искали
rank
, который возвращает ранг элементыR> a <- c(4.1, 3.2, 6.1, 3.1)
R> order(a)
[1] 4 2 1 3
R> rank(a)
[1] 3 2 4 1
так чтоrank
говорит вам, что заказать номера находятся в,order
говорит вам, как получить их в порядке возрастания.
plot(a, rank(a)/length(a))
даст график CDF. Чтобы понять, почемуorder
полезно, хотя, попробоватьplot(a, rank(a)/length(a),type="S")
что дает беспорядок, потому что данные не в порядке возрастанияесли бы ты это сделал
oo<-order(a)
plot(a[oo],rank(a[oo])/length(a),type="S")
или простоoo<-order(a)
plot(a[oo],(1:length(a))/length(a)),type="S")
вы получаете линейный график CDF.бьюсь об заклад, вы думаете ранг.
чтобы отсортировать 1D вектор или один столбец данных, просто вызовите вроде функции и передать в вашей последовательности.
С другой стороны,ордер функция необходима для сортировки данных два-размерные данные-т. е. несколько столбцов данных, собранных в матрице или фрейме данных.
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 году; далее предположим, что вы хотите знать расстояние самой длинной полевой цели, предпринятой в этом году, кто ее ударил, и было ли это хорошо или нет; вы также Хотите знать вторую самую длинную, а также третью самую длинную и т. д.; и, наконец, вы хотите самую короткую попытку цели поля.
(я подумал, что было бы полезно изложить идеи очень просто здесь,чтобы суммировать хороший материал, опубликованный @doug, & связанный @duffymo; +1 к каждому, кстати.)
?порядок говорит вам, какой элемент исходного вектора должен быть поставлен первым, вторым и т. д., чтобы отсортировать исходный вектор, тогда как ?ранг скажите вам, какой элемент имеет самый низкий, второй самый низкий и т. д., значение. Например:
> a <- c(45, 50, 10, 96) > order(a) [1] 3 1 2 4 > rank(a) [1] 2 3 1 4
так
order(a)
говорит: 'положите третий элемент первым, когда вы сортируете... ', тогда какrank(a)
говорит: 'первый элемент является вторым самым низким... '. (Обратите внимание, что они оба согласны с тем, какой элемент является самым низким и т. д.; они просто представляют информацию по-разному.) Таким образом, мы видим, что мы можем использоватьorder()
сортировать, но мы не можем использоватьrank()
таким образом:> a[order(a)] [1] 10 45 50 96 > sort(a) [1] 10 45 50 96 > a[rank(a)] [1] 50 10 45 96
в общем,
order()
не равенrank()
если вектор не был отсортирован уже:> b <- sort(a) > order(b)==rank(b) [1] TRUE TRUE TRUE TRUE
кроме того, поскольку
order()
(по существу) работает над рангами данных, вы можете составить их, не влияя на информацию, но наоборот производит тарабарщину:> order(rank(a))==order(a) [1] TRUE TRUE TRUE TRUE > rank(order(a))==rank(a) [1] FALSE FALSE FALSE TRUE
запуск этого маленького фрагмента кода позволил мне понять функцию order
x <- c(3, 22, 5, 1, 77) cbind( index=1:length(x), rank=rank(x), x, order=order(x), sort=sort(x) ) index rank x order sort [1,] 1 2 3 4 1 [2,] 2 4 22 1 3 [3,] 3 3 5 3 5 [4,] 4 1 1 2 22 [5,] 5 5 77 5 77
Ссылка:http://r.789695.n4.nabble.com/I-don-t-understand-the-order-function-td4664384.html