假设我有一个表
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