MATLAB实现excel中vlookup函数的查找匹配功能

您所在的位置:网站首页 如何在excel中使用vlookup函数查找两列数据的相同值 MATLAB实现excel中vlookup函数的查找匹配功能

MATLAB实现excel中vlookup函数的查找匹配功能

2023-09-13 10:39| 来源: 网络整理| 查看: 265

1.介绍我遇到的问题

图1

图2 

问题:我要根据图1的第一列店名和图2的店名为相等条件去匹配图1的第二列数据到图2黄色区域。 

2.MATLAB实现与excdl的vlookup函数相同功能的代码 function Result_data=CellLookup(x,y,xdata) % x为y的子集 % x为需要查找的 % y为x查找的范围数据 %xdata为当x=y时候,所匹配的数据,x和xdata数据是对应的 %声明空间 index_x=zeros(1,length(x)); index_y=zeros(1,length(x)); data=num2cell(zeros(length(y),3)*NaN); for i=1:length(x) for j=1:length(y) if isequal(x(i),y(j)) index_x(i)=i; index_y(i)=j; end end end data(:,1)=y; for n=1:length(index_x)%子集长度 data(index_y(n),2)=x(index_x(n)); data(index_y(n),3)=xdata(index_x(n)); end Result_data=data end 3.运行效果

评价:完美匹配数据。 注意:此代码适合cell类型数据匹配。如果是其他类型请提前转换为其他类型 4.算法的改进:解决x不是y子集问题

前面介绍的算法缺点是x必须为y的子集

下面是测试的代码:

clear,clc; %x是y的子集,将x与y对应位置匹配,缺数据赋值为NaN x=[1 2 4 5,9 ]; y=[1,2,3,4,5,7,9,10]; %声明空间 index_x=zeros(1,length(x)); index_y=zeros(1,length(x)); pdata=zeros(1,length(y))*NaN; for i=1:length(x) for j=1:length(y) if x(i)==y(j) index_x(i)=i; index_y(i)=j; end end end for n=1:length(index_x)%子集长度 pdata(index_y(n))=x(index_x(n)); end result=[pdata;y];

代码效果 如下:

思考:如果x不是y的子集时候会怎么样

会显示:数组索引必须为正整数或逻辑值。

很明显看出index_x与index_y中含有0,索引不可能0。此处为问题所在

解决方法:剔除0数据就行了

index_x(find(index_x==0))=[]; index_y(find(index_y==0))=[];

测试代码如下:

clear,clc; x=[1 2 4 5,9 100]; y=[1,2,3,4,5,7,9,10]; %声明空间 index_x=zeros(1,length(x)); index_y=zeros(1,length(x)); pdata=zeros(1,length(y))*NaN; for i=1:length(x) for j=1:length(y) if x(i)==y(j) index_x(i)=i; index_y(i)=j; end end end index_x(find(index_x==0))=[]; index_y(find(index_y==0))=[]; for n=1:length(index_x)%子集长度 pdata(index_y(n))=x(index_x(n)); end result=[pdata;y]

最终 CellLookup函数优化后代码如下:

function Result_data=CellLookup(x,y,xdata) %author:[email protected] % x为需要查找的 % y为x查找的范围数据 %xdata为当x=y时候,所匹配的数据,x和xdata数据是对应的 %声明空间 index_x=zeros(1,length(x)); index_y=zeros(1,length(x)); data=num2cell(zeros(length(y),2)*NaN); for i=1:length(x) for j=1:length(y) if isequal(x(i),y(j)) index_x(i)=i; index_y(i)=j; end end end index_x(find(index_x==0))=[]; index_y(find(index_y==0))=[]; data(:,1)=y; for n=1:length(index_x)%子集长度 % data(index_y(n),2)=x(index_x(n)); data(index_y(n),2)=xdata(index_x(n)); end Result_data=data; end 5、详细测试

如图:根据A列序号匹配与D列序号所对应的E列名字

clear,clc; [Num,TxT,Raw]=xlsread('data.xlsx'); CellLookup(Raw(:,4),Raw(:,1),Raw(:,5))

运行结果: 

 

还不懂的小伙伴可以下载代码直接测试:

链接:https://pan.baidu.com/s/1czaQyNSnpdG37tjQs_W0Vw  提取码:faik   

MATLAB QQ交流群 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3