Объедините массивы набора данных

Этот пример показывает, как объединить массивы набора данных с помощью join.

Загрузка демонстрационных данных.

Импортируйте данные из первого рабочего листа в hospitalSmall.xlsx в массив набора данных, затем сохраните только несколько переменных.

ds1 = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx'));
ds1 = ds1(:,{'id','name','sex','age'})
ds1 = 

    id               name              sex        age
    'YPL-320'        'SMITH'           'm'        38 
    'GLI-532'        'JOHNSON'         'm'        43 
    'PNI-258'        'WILLIAMS'        'f'        38 
    'MIJ-579'        'JONES'           'f'        40 
    'XLK-030'        'BROWN'           'f'        49 
    'TFP-518'        'DAVIS'           'f'        46 
    'LPD-746'        'MILLER'          'f'        33 
    'ATA-945'        'WILSON'          'm'        40 
    'VNL-702'        'MOORE'           'm'        28 
    'LQW-768'        'TAYLOR'          'f'        31 
    'QFY-472'        'ANDERSON'        'f'        45 
    'UJG-627'        'THOMAS'          'f'        42 
    'XUE-826'        'JACKSON'         'm'        25 
    'TRW-072'        'WHITE'           'm'        39 

Массив набора данных, ds1, имеет 14 наблюдений (строки) и 4 переменные (столбцы).

Импортируйте данные из рабочего листа Heights2 в hospitalSmall.xlsx.

ds2 = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx'),'Sheet','Heights2')
ds2 = 

    id               hgt
    'LPD-746'        61 
    'PNI-258'        62 
    'XUE-826'        71 
    'ATA-945'        72 
    'XLK-030'        63 

ds2 имеет измерения высоты для подмножества пяти человек от первого массива набора данных, ds1.

Объедините только соответствующее подмножество наблюдений.

Используйте join, чтобы объединить два массива набора данных, ds1 и ds2, сохраняя только подмножество наблюдений, которые находятся в ds2.

JoinSmall = join(ds2,ds1)
JoinSmall = 

    id               hgt    name              sex        age
    'LPD-746'        61     'MILLER'          'f'        33 
    'PNI-258'        62     'WILLIAMS'        'f'        38 
    'XUE-826'        71     'JACKSON'         'm'        25 
    'ATA-945'        72     'WILSON'          'm'        40 
    'XLK-030'        63     'BROWN'           'f'        49 

В JoinSmall переменная id только появляется однажды. Это вызвано тем, что это - ключевая переменная — переменная, которая соединяет наблюдения между двумя массивами набора данных — и имеет то же имя переменной и в ds1 и в ds2.

Включайте неполные наблюдения в слияние.

Объедините ds1 и ds2, сохраняющий все наблюдения в большем ds1.

joinAll = join(ds2,ds1,'type','rightouter','mergekeys',true)
joinAll = 

    id               hgt    name              sex        age
    'ATA-945'         72    'WILSON'          'm'        40 
    'GLI-532'        NaN    'JOHNSON'         'm'        43 
    'LPD-746'         61    'MILLER'          'f'        33 
    'LQW-768'        NaN    'TAYLOR'          'f'        31 
    'MIJ-579'        NaN    'JONES'           'f'        40 
    'PNI-258'         62    'WILLIAMS'        'f'        38 
    'QFY-472'        NaN    'ANDERSON'        'f'        45 
    'TFP-518'        NaN    'DAVIS'           'f'        46 
    'TRW-072'        NaN    'WHITE'           'm'        39 
    'UJG-627'        NaN    'THOMAS'          'f'        42 
    'VNL-702'        NaN    'MOORE'           'm'        28 
    'XLK-030'         63    'BROWN'           'f'        49 
    'XUE-826'         71    'JACKSON'         'm'        25 
    'YPL-320'        NaN    'SMITH'           'm'        38 
Каждое наблюдение в ds1 без соответствующих измерений высоты в ds2 имеет значение высоты NaN. Кроме того, потому что нет никакого значения id в ds2 для каждого наблюдения в ds1, необходимо объединить ключи с помощью опции 'MergeKeys',true. Это объединяет ключевую переменную, id.

Объедините массивы набора данных с различными ключевыми именами переменных.

При использовании join не необходимо для ключевой переменной иметь то же имя в массивах набора данных, которые будут объединены. Импортируйте данные из рабочего листа под названием Heights3 в hospitalSmall.xlsx.

ds3 = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx'),'Sheet','Heights3')
ds3 = 

    identifier       hgt
    'GLI-532'        69 
    'QFY-472'        62 
    'MIJ-579'        61 
    'VNL-702'        68 
    'XLK-030'        63 
    'LPD-746'        61 
    'TFP-518'        60 
    'YPL-320'        71 
    'ATA-945'        72 
    'LQW-768'        64 
    'PNI-258'        62 
    'UJG-627'        61 
    'XUE-826'        71 
    'TRW-072'        69 

ds3 имеет измерения высоты для каждого наблюдения в ds1. Этот массив набора данных имеет те же терпеливые идентификаторы как ds1, но они находятся под именем переменной identifier вместо id (и в различном порядке).

Задайте ключевую переменную.

Можно легко поменять имя переменной ключевой переменной в ds3 установкой d3.Properties.VarNames или использованием редактора Переменных, но это не требуется, чтобы выполнять слияние. Вместо этого можно задать имя ключевой переменной в каждом массиве набора данных с помощью LeftKeys и RightKeys.

joinDiff = join(ds3,ds1,'LeftKeys','identifier','RightKeys','id')
joinDiff = 

    identifier       hgt    name              sex        age
    'GLI-532'        69     'JOHNSON'         'm'        43 
    'QFY-472'        62     'ANDERSON'        'f'        45 
    'MIJ-579'        61     'JONES'           'f'        40 
    'VNL-702'        68     'MOORE'           'm'        28 
    'XLK-030'        63     'BROWN'           'f'        49 
    'LPD-746'        61     'MILLER'          'f'        33 
    'TFP-518'        60     'DAVIS'           'f'        46 
    'YPL-320'        71     'SMITH'           'm'        38 
    'ATA-945'        72     'WILSON'          'm'        40 
    'LQW-768'        64     'TAYLOR'          'f'        31 
    'PNI-258'        62     'WILLIAMS'        'f'        38 
    'UJG-627'        61     'THOMAS'          'f'        42 
    'XUE-826'        71     'JACKSON'         'm'        25 
    'TRW-072'        69     'WHITE'           'm'        39 

Объединенный массив набора данных, joinDiff, имеет тот же ключевой переменный порядок и имя как первый вход набора данных массивов к join, ds3.

Смотрите также

|

Связанные примеры

Больше о