美文网首页
R中实现一组数据中找到与另外一组数据最接近的值

R中实现一组数据中找到与另外一组数据最接近的值

作者: bcl_hx | 来源:发表于2019-10-19 19:35 被阅读0次

    为了方便,下面以excel中的数据为例。其中database列数据为一组按顺序排列的数,cdsStart列数据即将在database列中查找并得到与其最接近的数。


    excel中部分数据

    下面介绍两种方法实现:

    法一:(有点难理解)

    install.packages("readxl")        #安装读取excel的包
    library(readxl)                   #载入readxl包
    x<-read_excel("/Users/bcl/Desktop/reference/kinase/compare.xlsx",sheet=1) //读取excel(第一个参数为excel所在的地址加文件名,第二个参数为sheet参数,指定sheet名或者数字)
    x
    a <-as.vector(x$cdsStart)         #将excel中cdsStrart列转换为向量
    b <-as.vector(x$database)         #将excel中database列转换为向量
    cuts <- c(-Inf, b[-1]-diff(b)/2, Inf)#INF代表无穷大。
                                         #b[-1]代表b中去掉第一个数。
                                         #diff()计算b所有连续值之间的差异(后一个数减去前一个)
                                         #b[-1]-diff(b)/2:b中去掉第一个数的每个数减去b的每个连续值差的一半
                                         #cuts从-INF----------+INF,分成很多区间
    index = findInterval(a, cuts)        #findInterval(a,cuts)函数在cuts中(区间)查找a的索引。a为数字,cuts为数字矢量
                                         #简单理解就是在cuts区间中查找a,然后返回a的位置
    b[index]                             #显示向量b的第index个数。   
    
    method 1

    法二:

    install.packages("readxl")
    library(readxl)
    x<-read_excel("/Users/bcl/Desktop/reference/kinase/compare.xlsx",sheet=1)
    x
    a <-as.vector(x$cdsStart)   
    b <-as.vector(x$database)   
    index<-vector()                    #创建一个空向量(index)
    for(num in a){
        index = c(index,which(abs(b-num)==min(abs(b-num))))
    }                                   #min(abs(b-num))函数求b中数减去a中数的绝对值最小值(最接近)。
                                        #which(abs(b-num)==min(abs(b-num))):左边与右边相同时返回行号(indices)。此时的index为一个索引向量
    b[index]
    

    讲一下which:给出逻辑对象的真正索引,允许数组索引。


    method 2

    相关文章

      网友评论

          本文标题:R中实现一组数据中找到与另外一组数据最接近的值

          本文链接:https://www.haomeiwen.com/subject/zddnmctx.html