comparison of the datasets
    3 views (last 30 days)
  
       Show older comments
    
    MatLab Code N
 on 9 Apr 2019
  
    
    
    
    
    Commented: Andrei Bobrov
      
      
 on 10 Apr 2019
            Hi,
In the attached excel file, there are two different sheet (X_val and range_val). The X_val sheet contains a series of numbers. The range_val sheet contains R1 and R2 columns which are the lower and higher numbers of a range and the third column in range _val is a X-Id of the repective range. I want a loop which will check folloing stuffs:
- Check each values in X-val to see if it is a number which lies bettwen the numbers in range_val column 1 and 2.
- if any x-val is a number lying between range_val column 1 and 2, then create a column in X-val and write the corresponding X_ID.
- if any-number is not in a required range, then just put NaN next to the X-val.
the final desired output should be a excel sheet which look like:
 X-val            X_ID
 2.11             NaN
 3.05             NaN
 4.09             NaN
 5.6               c  
 2.5                NaN 
 6                    c
 4.2                 b 
 8.9                 h
 25                  NaN
Note: I have a long dataset, given example is just a part of it.
Thanks!!
0 Comments
Accepted Answer
  Andrei Bobrov
      
      
 on 9 Apr 2019
        
      Edited: Andrei Bobrov
      
      
 on 9 Apr 2019
  
      T = readtable('example.xlsx','sheet',1);
T2 = readtable('example.xlsx','sheet',2);
R12 = unique([T2.R1;T2.R2+eps(1e3)]);
C = categorical(repmat({'NoN'},numel(R12),1));
[lo,ii] = ismember(R12,T2.R1);
C(lo) = T2.X_ID(ii(lo));
out = table(T.X,discretize(T.X,[-inf;R12;inf],C([end,1:end])),'v',{'X','X_ID'});
2 Comments
More Answers (1)
  Guillaume
      
      
 on 9 Apr 2019
        
      Edited: Guillaume
      
      
 on 9 Apr 2019
  
      I don't see why 4.2 should get a 'b' id.
X_val = readtable('example.xlsx', 'Sheet', 'X_val')
range_val = readtable('example.xlsx', 'Sheet', 'range_val')
[destrow, idrow] = find(X_val.X >= range_val.R1' & X_val.X <= range_val.R2');
X_val.X_ID(destrow) = range_val.X_ID(idrow)
Note that this leaves empty the cells that don't match instead of putting NaN in them. In general, it's not a good idea to mix text and numbers (even NaN) in the same column. 
See Also
Categories
				Find more on Data Type Conversion 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!