当前位置: 首页 > news >正文

R语言-排序

前言

  在R中,和排序相关的函数主要有三个:sort(),rank(),order()、arrange()。其中R中自带排序函数有 order,sort,rank 函数,plyr中有 arrange 函数。

  order和sort是针对向量进行操作的,arrange针对数据框。其中order返还排序后的坐标,sort返还排序后的值,arrange返还的是基于某列排序后的数据框,方便多重依据排序。

目录

 1. 向量的排序

 2. 矩阵的排序

 3. 数据框排序


1. 向量的排序

  sort(x)是对向量x进行排序,返回值排序后的数值向量。

  rank()是求秩的函数,它的返回值是这个向量中对应元素的“排名”,这个是向量开始的说的,第一个向量97的排名为6。

  order()的返回值是对应“排名”的元素所在向量中的位置,比如从小到大的排序,应该排在第一个位置的元素为32,它在向量的位置为5。

     ## 下面以一小段R代码来举例说明:
     > x<-c(97,93,85,74,32,100,99,67)
     > sort(x)
     [1] 32 67 74 85 93 97 99 100
     > order(x)
     [1] 5 8 4 3 2 1 7 6
     > rank(x)
     [1] 6 5 4 3 1 8 7 2


    # 举例来说,
    
    x<-c(97,93,85,74,32,100,99,67),
    
    # 希望返回x中满足值大于50且小于90的元素在向量x中的下标。
    
    # 当时想了想,没觉得有什么好的方法,使用了比较繁琐的语句
    
    sort(x,index.return=TRUE)[[2]][sort(x,index.return=TRUE)[[1]]<90&sort(x,index.return=TRUE)[[1]]>50], 
    
    # 后来发现sort(x,index.return=TRUE)[[2]]和order(x)的返回值是一样的,而sort(x,index.return=TRUE)[[1]]和sort(x)的返回值是相同的,
    
    # 因此语句可以简化为 order(x)[sort(x)>50&sort(x)<90]。
    
        ### 下面是相关的R代码:
        > x
        [1] 97 93 85 74 32 100 99 67
        > sort(x,index.return=TRUE)[[2]][sort(x,index.return=TRUE)[[1]]<90 & sort(x,index.return=TRUE)[[1]]>50]
        [1] 8 4 3
        > order(x)[sort(x)>50&sort(x)<90]
        [1] 8 4 3
        > sort(x,index.return=TRUE)
        $x
        [1] 32 67 74 85 93 97 99 100
        $ix
        [1] 5 8 4 3 2 1 7 6
        > order(x)
        [1] 5 8 4 3 2 1 7 6

         (x <- cbind(x1 = 3, x2 = c(4:1, 2:5)))
             x1 x2
        [1,]  3  4
        [2,]  3  3
        [3,]  3  2
        [4,]  3  1
        [5,]  3  2
        [6,]  3  3
        [7,]  3  4
        [8,]  3  5
        
        order(x[,2])
        [1] 4 3 5 2 6 1 7 8
        
        sort(x[,2])
        [1] 1 2 2 3 3 4 4 5

2. 矩阵的排序

    # 比如说要对一个矩阵x进行排序,先根据第一列,然后根据第二列排序,可以用下面的语句实现:
    
        x[order(x[,1],x[,2]),]
    
    # 上面的是按照升序的方法,如果要降序的话,
    
        x[order(-x[,1],-x[,2]),]
    
    # 注:向量用sort,矩阵用order
    
    # 如果降序加负号,例如x[order(-x[,1],-x[,2]),],就会出现:
        In Ops.factor(name) : – not meaningful for factors
    
    # 如果要降序的话可以这样
        sort(x, decreasing = FALSE, na.last = NA, …);
        sort.list(x, partial = NULL, na.last = TRUE, decreasing = FALSE,method = c("shell", "quick", "radix"))

3. 数据框排序

# 如何利用自带函数以及plyr包对数据框进行排序

## 利用order
    index <- order(x[,2])
    x[index, ]
         x1 x2
    [1,]  3  1
    [2,]  3  2
    [3,]  3  2
    [4,]  3  3
    [5,]  3  3
    [6,]  3  4
    [7,]  3  4
    [8,]  3  5

## 利用sort, 类似于循环操作
    apply(x, 2, sort)
         x1 x2
    [1,]  3  1
    [2,]  3  2
    [3,]  3  2
    [4,]  3  3
    [5,]  3  3
    [6,]  3  4
    [7,]  3  4
    [8,]  3  5

## 利用arrange,方便多重依据排序
    library(plyr)
    x <- as.data.frame(x) ## arrange只能针对数据框进行操作
    arrange(x,x[,2])

转载于:https://www.cnblogs.com/cloudtj/articles/7077070.html

相关文章:

  • idea 15安装步骤2017.6.25
  • 机器学习:绪论
  • JS(一)
  • spring data jpa mysql 悲观锁
  • 迅为IMX6开发板支持全网通4G模块丨GPS模块丨WIFI蓝牙丨千兆以太网
  • hackerrank Diameter Minimization
  • 如何开发一个Servlet
  • HDU1023 Train Problem II
  • Linux 定时任务的学习
  • 什么是编程语言
  • JavaSE--【转】网络安全之证书、密钥、密钥库等名词解释
  • Python基础 :正则表达式
  • 是否有网络
  • 是时候学一波STL了。。。
  • html特殊字符的html,js,css写法汇总
  • 2019.2.20 c++ 知识梳理
  • Linux CTF 逆向入门
  • MySQL用户中的%到底包不包括localhost?
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • 阿里研究院入选中国企业智库系统影响力榜
  • 从0到1:PostCSS 插件开发最佳实践
  • 聊一聊前端的监控
  • 一些css基础学习笔记
  • 函数计算新功能-----支持C#函数
  • 数据可视化之下发图实践
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #DBA杂记1
  • $L^p$ 调和函数恒为零
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .aanva
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET连接数据库方式
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • [Android 数据通信] android cmwap接入点
  • [Android] Amazon 的 android 音视频开发文档
  • [BROADCASTING]tensor的扩散机制
  • [C++][基础]1_变量、常量和基本类型
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [flink总结]什么是flink背压 ,有什么危害? 如何解决flink背压?flink如何保证端到端一致性?
  • [Google Guava] 2.1-不可变集合
  • [HNOI2006]鬼谷子的钱袋
  • [idea]关于idea开发乱码的配置
  • [Mac软件]Goldie App v2.2 Mac黄金比例设计工具
  • [NKCTF 2024]web解析
  • [nowCoder] 两个不等长数组求第K大数
  • [ROS2] --- ROS diff ROS2
  • [SHELL]shell scripts笔记(1)
  • [Unity 3D] Unity 3D 性能优化(三)
  • [VSCode] Shortcuts
  • [VulnHub靶机渗透] dpwwn: 1