order () 함수 이해
order()
기능 이 어떻게 작동 하는지 이해하려고 합니다. 나는 그것이 정렬 될 때 원래 벡터를 정렬 할 인덱스의 순열을 반환한다는 인상을 받았다.
예를 들어
> a <- c(45,50,10,96)
> order(a)
[1] 3 1 2 4
c(2, 3, 1, 4)
정렬 된 목록이 10 45 50 96이기 때문에이 반환 될 것으로 예상했을 것입니다.
누군가이 함수의 반환 값을 이해하도록 도울 수 있습니까?
이것은 그것을 설명하는 것 같습니다.
의 정의
order
ISa[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 벡터 또는 단일 데이터 열을 정렬하려면 sort 함수를 호출하고 시퀀스를 전달 하면 됩니다.
반면에 order 함수는 데이터를 2 차원 데이터, 즉 행렬 또는 데이터 프레임에 수집 된 여러 열의 데이터 를 정렬하는 데 필요합니다 .
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 년 NFL 시즌의 필드 골 시도 데이터를 발췌 한 것입니다.이 데이터 프레임은 제가 'fg'라고 불렀습니다. 이 10 개의 데이터 포인트가 2008 년에 시도 된 모든 필드 골을 나타낸다고 가정합니다. 또한 그해에 시도한 가장 긴 필드 골의 거리, 누가 킥을 찼는 지, 좋은지 아닌지 알고 싶다고 가정합니다. 당신은 또한 두 번째로 긴 것, 세 번째로 긴 것을 알고 싶어합니다. 마지막으로 가장 짧은 필드 골 시도를 원합니다.
글쎄, 당신은 이렇게 할 수 있습니다.
sort(fg$Dist, decreasing=T)
반환 : 50 48 43 37 34 32 26 25 25 20
정확하지만별로 유용하지는 않습니다. 가장 긴 필드 골 시도의 거리, 두 번째로 긴 시도, 가장 짧은 시도까지의 거리를 알려줍니다. 그러나 그게 우리가 아는 전부입니다. 다음과 같은 단일 속성 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
이것이 주문 이하는 일입니다. 2 차원 데이터의 경우 '정렬'입니다. 즉, 행 번호로 구성된 1D 정수 인덱스를 반환하여 해당 벡터에 따라 행을 정렬하면 열 Dist 에서 올바른 행 지향 정렬이 제공됩니다.
Here's how it works. Above, sort was used to sort the Dist column; to sort the entire dataframe on the Dist column, we use 'order' exactly the same way as 'sort' is used above:
ndx = order(fg$Dist, decreasing=T)
(i usually bind the array returned from 'order' to the variable 'ndx', which stands for 'index', because i am going to use it as an index array to sort.)
that was step 1, here's step 2:
'ndx', what is returned by 'sort' is then used as an index array to re-order the dataframe, 'fg':
fg_sorted = fg[ndx,]
fg_sorted is the re-ordered dataframe immediately above.
In sum, 'sort' is used to create an index array (which specifies the sort order of the column you want sorted), which then is used as an index array to re-order the dataframe (or matrix).
(I thought it might be helpful to lay out the ideas very simply here to summarize the good material posted by @doug, & linked by @duffymo; +1 to each,btw.)
?order tells you which element of the original vector needs to be put first, second, etc., so as to sort the original vector, whereas ?rank tell you which element has the lowest, second lowest, etc., value. For example:
> a <- c(45, 50, 10, 96)
> order(a)
[1] 3 1 2 4
> rank(a)
[1] 2 3 1 4
So order(a)
is saying, 'put the third element first when you sort... ', whereas rank(a)
is saying, 'the first element is the second lowest... '. (Note that they both agree on which element is lowest, etc.; they just present the information differently.) Thus we see that we can use order()
to sort, but we can't use rank()
that way:
> a[order(a)]
[1] 10 45 50 96
> sort(a)
[1] 10 45 50 96
> a[rank(a)]
[1] 50 10 45 96
In general, order()
will not equal rank()
unless the vector has been sorted already:
> b <- sort(a)
> order(b)==rank(b)
[1] TRUE TRUE TRUE TRUE
Also, since order()
is (essentially) operating over ranks of the data, you could compose them without affecting the information, but the other way around produces gibberish:
> order(rank(a))==order(a)
[1] TRUE TRUE TRUE TRUE
> rank(order(a))==rank(a)
[1] FALSE FALSE FALSE TRUE
Running this little piece of code allowed me to understand the order function
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
Reference: http://r.789695.n4.nabble.com/I-don-t-understand-the-order-function-td4664384.html
This could help you at some point.
a <- c(45,50,10,96)
a[order(a)]
What you get is
[1] 10 45 50 96
The code I wrote indicates you want "a" as a whole subset of "a" and you want it ordered from the lowest to highest value.
In simple words, order()
gives the locations of elements of increasing magnitude.
For example, order(c(10,20,30))
will give 1,2,3 and order(c(30,20,10))
will give 3,2,1.
참고URL : https://stackoverflow.com/questions/2315601/understanding-the-order-function
'developer tip' 카테고리의 다른 글
자바 스크립트 효율성 : 'for'대 'forEach' (0) | 2020.10.14 |
---|---|
foreach 식별자 및 클로저 (0) | 2020.10.14 |
Visual Studio 2012의 웹 사이트 관리 도구는 어디에 있습니까? (0) | 2020.10.14 |
PHP에서 문자열의 일부를 어떻게 바꾸나요? (0) | 2020.10.14 |
CSS로 원하지 않는 표 셀 테두리 제거 (0) | 2020.10.13 |