unique command and external Excel files
2 views (last 30 days)
Show older comments
Francesco Ciardiello
on 6 Mar 2021
Commented: Francesco Ciardiello
on 7 Mar 2021
I have 50 EXCEL files. In Sheet 2 of each EXCEL file, there are mainly two columns called WA and CI. The program below should take these two columns and check if there are repeated values. I have attached one of the typical Excel files on here. The file is indexed 2.xlsx. The program has a for-loop on external files. The strange thing is that MATLAB says that CI has a repeated value but, checking the file, there is no repetition. If I copy the column CI in MATLAB. I execute the command length(CI) == length(unique(CI)). Then the result is 1. There are no repetead values. This corresponds to the truth because there are no repeated values in CI. I do not understand where I am wrong in this small program and why the two outcomes are different.
path_to_folder = '~/Desktop/75_3/';
for i=1:50
file = strcat(num2str(i),'.xlsx');
path_to_file = strcat(path_to_folder,file);
subset = xlsread(path_to_file,'Sheet2');
CI = subset(:,2);
length(CI) == length(unique(CI))
end
4 Comments
dpb
on 6 Mar 2021
The problem is still in the post -- I don't know what you did, but clearly the attached file has a duplicated entry in the second column, whatever you name the variable isn't going to either make it appear or go away.
>> CI=d(:,2);
>> length(CI)==length(unique(CI))
ans =
logical
0
>>
Whether the values are in the original array or a copy in another variable does not change the symptoms...
Even running the same code doesn't make any differenc--
>> path_to_folder = '';
for i=2:2
file = strcat(num2str(i),'.xlsx');
path_to_file = strcat(path_to_folder,file);
subset = xlsread(path_to_file,'Sheet2');
CI = subset(:,2);
length(CI) == length(unique(CI))
end
ans =
logical
0
>>
Accepted Answer
dpb
on 6 Mar 2021
Well, there is a duplicate in the 2nd column...
>> d=xlsread('x.xlsx','Sheet2');
>> arrayfun(@(i)numel(unique(d(:,i)))==numel(d(:,i)),[1:2])
ans =
1×2 logical array
1 0
>>
> sd=sort(d(:,2));
>> find(diff(sd)==0)
ans =
71
>> sd(70:72)
ans =
0.759021496168829
0.765957446808511
0.765957446808511
>> [u,iu]=unique(d(:,2));
>> whos u
Name Size Bytes Class Attributes
u 74x1 592 double
>>
0 Comments
More Answers (0)
See Also
Categories
Find more on Spreadsheets in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!