在for循环中提取按唯一列值分组的行.Matlab中的多个输出



假设我有一个表

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];

我想使用for循环(实际数据要大得多(,并按"年龄"列中的每个唯一值进行分组,并输出具有相同值的不同表。在这种情况下,如果我们按年龄分组,一张桌子是安和鲍勃(13岁(,第二张桌子是乔和玛丽,第三张桌子是凯蒂、约翰和李。

到目前为止,我知道当组很小(表不多(时该怎么做,但当我有很多独特的值将它们分组时该怎么办?

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

您可以使用unique函数来获取所有唯一的年龄值,然后对这些值运行for循环。

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  

相关内容

  • 没有找到相关文章

最新更新