研究背景:
使用地理探测器进行探测分析,有X变量是单一值,因为有大量的矩阵,不能手动单一修改,所以要先对矩阵按列,统计每列各个元素的个数,若有一列只有一个或两个值,则要删除该列。
使用的函数:tabulate()函数
tabulate()函数是一个常用的计算矩阵中各个元素出现次数的函数,这里我们只需要稍加变通,设全部的矩阵为dataall,只需要在前面加上一句:data = dataall(:,1),类似于这样的一句,这样table = tabulate(data)计算的就是某一列各元素出现的个数。
再通过if函数判断,如果table行数少于3,那么便是不符合要求的数据。
实例:
%检索每列元素的出现次数,使用tab在输出文件名上标记,单独对个别的不符合要求的数据进行手动处理
datax1=dataall(:,2);
datax2=dataall(:,3);
datax3=dataall(:,4);
tablex1 = tabulate(datax1);
tablex2 = tabulate(datax2);
tablex3 = tabulate(datax3);
%删除table中出现次数为0的行,次数在第二列
tablex1(find(tablex1(:,2)==0),:)=[];
tablex2(find(tablex2(:,2)==0),:)=[];
tablex3(find(tablex3(:,2)==0),:)=[];
%计算table的行数,如果少于3行,就不能进行地理探测
[m1,n1]=size(tablex1);
[m2,n2]=size(tablex2);
[m3,n3]=size(tablex3);
if m1<3 || m2<3 || m3 <3
tab = "j";
else
tab = "a";
end
%输出路径与文件名
outpath1=strcat('D:\city\2000\\',tab,pathori(1:4));
outpath=strcat(outpath1,'.xlsx');
这样只从几百个里面筛选出来了几个不符合要求的,幸好不符合要求的不多,可以手动删除,否则还要使用matlab进行修改,删掉不符合要求的列