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

2019-10-19  本文已影响0人  bcl_hx

为了方便,下面以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
上一篇下一篇

猜你喜欢

热点阅读