Выберите строки в таблице, которые содержат одно имя в строковом векторе - PullRequest
1 голос
/ 11 марта 2020

Я пытаюсь установить таблицу matlab на основе значений в одном столбце. Я хотел бы выбрать несколько строк, которые содержат любое из имен в этом массиве строк: names = ["Smith", "Johnson", "Wilson"]. Ниже приведен пример выбора отдельного компонента, но я хотел бы знать, как выбрать из массива ...

Пример выбора на основе одного дескриптора:

load patients
patients = table(LastName,Age,Gender,Height,Weight,Smoker);
subset_patients = patients(strcmp(patients.LastName, 'Wilson'),:)

I Я хотел бы сделать что-то вроде кода ниже - где я выбираю все строки, которые включают имена. Поэтому я бы получил три строки данных, по одной для каждого имени.

names = ["Smith", "Johnson", "Wilson"]
subset_patients_names = patients(strcmp(patients.LastName, names),:)

Однако этот код не работает.

1 Ответ

2 голосов
/ 11 марта 2020

Попробуйте ismember вместо strcmp:

>> subset_patients_names = patients(ismember(patients.LastName, names),:)
subset_patients_names =
  3×6 table
    LastName     Age    Gender    Height    Weight    Smoker
    _________    ___    ______    ______    ______    ______
    'Smith'      38     'Male'    71        176       true  
    'Johnson'    43     'Male'    69        163       false 
    'Wilson'     40     'Male'    68        180       false 

Обратите внимание, что первый столбец в таблице patients содержит символьные векторы , тогда как names - это массив строк . Приведенный выше код работает, потому что, как указано в документации ismember,

ismember(A,B): A должен принадлежать к тому же классу, что и B, со следующими исключениями: [.. .]

Массивы ячеек векторов символов можно комбинировать с массивами символов или строковыми массивами.

...