R语言排序操作

浏览: 1279

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
>
推荐 0
本文由 Seven7 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册