## comparison of the datasets

### MatLab Code N (view profile)

on 9 Apr 2019
Latest activity Commented on by Andrei Bobrov

on 10 Apr 2019

### Andrei Bobrov (view profile)

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!!

### Andrei Bobrov (view profile)

on 9 Apr 2019
Edited by Andrei Bobrov

### Andrei Bobrov (view profile)

on 9 Apr 2019

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'});

MatLab Code N

on 9 Apr 2019
Thanks!
Guillaume

### Guillaume (view profile)

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

### Guillaume (view profile)

on 9 Apr 2019
Edited by Guillaume

### Guillaume (view profile)

on 9 Apr 2019

I don't see why 4.2 should get a 'b' id.
[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.

MatLab Code N

on 9 Apr 2019
Thanks!
Andrei Bobrov

on 10 Apr 2019
+1