Извлечь группу строк по уникальным значениям столбца в a для l oop. Несколько выходов в Matlab - PullRequest
0 голосов
/ 24 апреля 2020

Допустим, у меня есть таблица

Name = {'Ann';'Joe';'Bob';'Mary';'Katy','John','Lee'};
Age = [13,17,13,17,15,15,15];
Weight = [100,160,160,124],142,112,142];
Grade = [73,99,50,64,88,45,76];

Я хочу использовать для l oop (реальные данные намного больше), и сгруппировать по каждому уникальному значению в столбце "возраст" и выводить разные таблицы с одинаковыми значениями. В этом случае, если мы сгруппируем по возрасту, одна таблица с Энн и Бобом (13 лет), вторая таблица с Джо и Мэри и третья таблица с Кэти, Джоном и Ли.

До сих пор я знаю, как это сделать, когда группы маленькие (не много таблиц), но как это сделать, когда у меня много уникальных значений для их группировки?

group = findgroups(data.Age);
group2 = group(:,1) == 2;
data_group2 = data(group2,:);

1 Ответ

1 голос
/ 25 апреля 2020

Вы можете использовать функцию unique, чтобы получить все уникальные значения возраста, а затем выполнить для них l oop.

Name = {'Ann','Joe','Bob','Mary','Katy','John','Lee'};
Age = [13,17,13,17,15,15,15];
Weight = [100,160,160,124,142,112,142];
Grade = [73,99,50,64,88,45,76];

age_groups = unique(Age);
tables = {};

for i = 1:length(age_groups)
    indices = Age == age_groups(i);
    tables{i} = table(categorical(Name(indices)).', Age(indices).', Weight(indices).', Grade(indices).','VariableNames',{'Name','Age','Weight','Grade'});
end

Затем вы можете получить доступ к каждой из таблиц следующим образом:

>> tables{1}

ans =

  2×4 table

    Name    Age    Weight    Grade
    ____    ___    ______    _____

    Ann     13      100       73  
    Bob     13      160       50  

>> tables{2}

ans =

  3×4 table

    Name    Age    Weight    Grade
    ____    ___    ______    _____

    Katy    15      142       88  
    John    15      112       45  
    Lee     15      142       76  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...