MATLAB Answers

0

comparison of the datasets

Asked by MatLab Code N on 9 Apr 2019
Latest activity Commented on by 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:
  1. 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.
  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.
  3. 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

Sign in to comment.

2 Answers

Andrei Bobrov
Answer by Andrei Bobrov
on 9 Apr 2019
Edited by Andrei Bobrov
on 9 Apr 2019
 Accepted Answer

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

Thanks!
Guillaume
on 9 Apr 2019
Well, that's a bit complicated!

Sign in to comment.


Guillaume
Answer by Guillaume
on 9 Apr 2019
Edited by 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.

  2 Comments

Thanks!
Andrei Bobrov
on 10 Apr 2019
+1

Sign in to comment.