1、在R中排序主要要区分三个函数:sort(),rank(),order()
sort():是对向量x进行排序,返回值是排序后的数值向量。
rank()是求秩的函数,它的返回值是这个向量中对应元素的“排名”。
order()的返回值是对应“排名”的元素所在向量中的位置。
> set.seed(3)
> x <- sample(1:100,10)
> x
[1] 17 80 38 32 58 96 12 28 54 95
> sort(x)#从小到大排序,返回的是排序后的元素,sort(x, decreasing = T)降序
[1] 12 17 28 32 38 54 58 80 95 96
> order(x)#升序排序后的向量,返回的是各元素在原来向量中下标标号。可以通过下标找到对应值
[1] 7 1 8 4 3 9 5 2 10 6
> rank(x)#从小到大排序之后,返回的也是下标标号,是元素在排序之后新向量中各元素对应的下标标号。
[1] 2 8 5 4 7 10 1 3 6 9
>
2、实际中经常用到order来排序
order(X, na.last=TRUE, decreasing=FALSE)
返回值: X 排好序的下标向量(不是世=实际的值)
na.last 控制空值NA排在最前还是最后,默认最后
desceasing 控制升序还是降序排列,默认升序
> A <- c(NA,5,5:1,1,NA)
> B <- c(NA,3,2,1:3,4,5,NA)
>
> ###vector
> order(A)###默认排序方式为升序,输出的为下标,NA值排最后
[1] 7 8 6 5 4 2 3 1 9
> A[order(A)]###输出下标对应的值
[1] 1 1 2 3 4 5 5 NA NA
> order(A,decreasing = T)###降序排序
[1] 2 3 4 5 6 7 8 1 9
> A[order(A,decreasing = T)]###输出下标对应的值
[1] 5 5 4 3 2 1 1 NA NA
> order(-A)######'-' 相当于 decreasing = T
[1] 2 3 4 5 6 7 8 1 9
> ###dataframe
> (df <- data.frame(a=A,b=B))
a b
1 NA NA
2 5 3
3 5 2
4 4 1
5 3 2
6 2 3
7 1 4
8 1 5
9 NA NA
>
> order(df$a,df$b)###a asc; b asc
[1] 7 8 6 5 4 3 2 1 9
> (df[order(df$a,df$b),])###a asc; b asc
a b
7 1 4
8 1 5
6 2 3
5 3 2
4 4 1
3 5 2
2 5 3
1 NA NA
9 NA NA
> (df[order(-df$a,df$b),])###a desc; b asc
a b
3 5 2
2 5 3
4 4 1
5 3 2
6 2 3
7 1 4
8 1 5
1 NA NA
9 NA NA
> (df[order(df$a,-df$b),])###a asc; b desc
a b
8 1 5
7 1 4
6 2 3
5 3 2
4 4 1
2 5 3
3 5 2
1 NA NA
9 NA NA
> (df[order(-df$a,-df$b),])###a desc; b desc
a b
2 5 3
3 5 2
4 4 1
5 3 2
6 2 3
8 1 5
7 1 4
1 NA NA
9 NA NA
> (df[order(df$a,df$b,decreasing = T),])##a desc; b desc;decreasing只能使用一次,作用于前面所有列
a b
2 5 3
3 5 2
4 4 1
5 3 2
6 2 3
8 1 5
7 1 4
1 NA NA
9 NA NA
> (df[order(df$a,df$b,decreasing = T,na.last=F),])###把NA值放在最上面
a b
1 NA NA
9 NA NA
2 5 3
3 5 2
4 4 1
5 3 2
6 2 3
8 1 5
7 1 4
>