【问题标题】:Extract rows group by unique column values in a for loop. Multiple outputs in Matlab在 for 循环中按唯一列值提取行分组。 Matlab中的多个输出
【发布时间】:2020-04-26 05:34:02
【问题描述】:

假设我有一张桌子

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 循环(实际数据要大得多),并按“年龄”列中的每个唯一值分组,并输出具有相同值的不同表。 在这种情况下,如果我们按年龄分组,一张桌子是 Ann 和 Bob(13 岁),第二张桌子是 Joe 和 Mary,第三张桌子是 Katy、John 和 Lee。

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

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

【问题讨论】:

    标签: matlab for-loop unique


    【解决方案1】:

    您可以使用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  
    

    【讨论】:

      猜你喜欢
      • 2017-12-08
      • 2015-01-26
      • 2020-09-08
      • 2018-04-02
      • 2021-11-29
      • 2018-02-04
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多