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