How to replace some elements of a table column with the corresponding values ​​of another array of different sizes in Matlab?

I have a categorical table variable categorical alloptions.Exp (96399 rows) that has values ​​such as:

'Mar1 15'
'Mar1 15'
'Mar1 15'
'Mar1 15'
'Mar 15'
'Mar 15'
'Mar 15'
'Apr1 15'
'Apr2 15'
'Apr 15'
'Apr4 15'
'May1 15'
'May2 15'
'May 15'
'May4 15' ....

and I have an array of 119x2 Expiration_Table having the following values:

'Mar1 15'   '06-Mar-2015'
'Mar2 15'   '13-Mar-2015'
'Mar 15'    '20-Mar-2015'
'Mar5 15'   '31-Mar-2015'
'Apr1 15'   '02-Apr-2015'
'Apr2 15'   '10-Apr-2015'
'Apr 15'    '17-Apr-2015'
'Apr4 15'   '24-Apr-2015'
'May1 15'   '01-May-2015'
.....

I need to create another table variable alloptions.ExpDate with the corresponding values ​​from Expiration_Table (:, 2), which is from the second column.

Is there a better way to do this without using loops?

+4
source share
3 answers

How about this?

[v, w] = ismember(alloptions, Expiration_Table(:,1));
result = Expiration_Table(w(v),2);

In your example with

alloptions = {'Mar1 15'
              'Mar1 15'
              'Mar1 15'
              'Mar1 15'
              'Mar 15'
              'Mar 15'
              'Mar 15'
              'Apr1 15'
              'Apr2 15'
              'Apr 15'
              'Apr4 15'
              'May1 15'
              'May2 15'
              'May 15'
              'May4 15'};
Expiration_Table = {'Mar1 15'   '06-Mar-2015'
                    'Mar2 15'   '13-Mar-2015'
                    'Mar 15'    '20-Mar-2015'
                    'Mar5 15'   '31-Mar-2015'
                    'Apr1 15'   '02-Apr-2015'
                    'Apr2 15'   '10-Apr-2015'
                    'Apr 15'    '17-Apr-2015'
                    'Apr4 15'   '24-Apr-2015'
                    'May1 15'   '01-May-2015'}

result

result = 
    '06-Mar-2015'
    '06-Mar-2015'
    '06-Mar-2015'
    '06-Mar-2015'
    '20-Mar-2015'
    '20-Mar-2015'
    '20-Mar-2015'
    '02-Apr-2015'
    '10-Apr-2015'
    '17-Apr-2015'
    '24-Apr-2015'
    '01-May-2015'

, alloptions , , alloptions = nominal(alloptions); .

,

  • alloptions Expiration_Table, .
  • alloptions, Expiration_Table, . , :

, :

[v, w] = ismember(alloptions, Expiration_Table(:,1));
result = repmat({''}, numel(alloptions), 1); %// initiallize to predefined value
result(v) = Expiration_Table(w(v),2);

result = 
    '06-Mar-2015'
    '06-Mar-2015'
    '06-Mar-2015'
    '06-Mar-2015'
    '20-Mar-2015'
    '20-Mar-2015'
    '20-Mar-2015'
    '02-Apr-2015'
    '10-Apr-2015'
    '17-Apr-2015'
    '24-Apr-2015'
    '01-May-2015'
    ''
    ''
    ''
+5

! . "" MATLAB, . , 1 , . R2015b :

new_table = outerjoin(my_table, expiration_table,'Type','left');

, MATLAB . :

  • , my_table expiration_table , - , . , "LeftKey" ..
  • , expiration_table , !
  • , . / , - , , (, x = datenum(char(date_categorical)))

. t t2

 t.d                     t2.d        t2.n
 ___                     _____       ____
'jan'                    'feb'        2
'feb'                    'asdf'       0
'mar'                    'feb'        2.1
                         'mar'        3

outerjoin(t, t2,'Type','left') :

 d_t     d_t2      n 
_____    _____    ___
'feb'    'feb'      2
'feb'    'feb'    2.1
'jan'    ''       NaN
'mar'    'mar'      3
0

. , . Expiration_Table, :

'Mar1 15'   '06-Mar-2015'
'Mar1 15'   '13-Mar-2015'
'Mar 15'    '20-Mar-2015'
...

, .

, ?

0

Source: https://habr.com/ru/post/1615360/


All Articles