根据列值将单元阵列自动拆分为可变数量的新单元阵列

时间:2013-09-19 15:56:22

标签: matlab split

前段时间我问了这个问题:Automatic split of character matrix according to a column values into variable number of new dataframes

对于那个问题,函数split是完美的答案,现在,我正在试图在Matlab中做同样的事情,并且找不到任何相同的函数。

所以,它很简单,我的问题是:是否有任何函数与Matlab中的R split函数相同?如果没有,我怎么能完全按照Matlab中的链接问题提出要求?

2 个答案:

答案 0 :(得分:1)

uniquestrcmp函数适用于单元格数组。怎么样的

x = {'Hi', 'Med', 'Hi', 'Low'; 'A', 'D', 'A', 'C'; '8', '3', '9', '9'; '1', '1', '1', '2'}';

for ii = unique(x(:, 3))'
    x(find(strcmp(x(:, 3), ii)), :)
end

虽然看似愚蠢,但for循环的索引数组必须是一行,因此在unique(x(:, 3))'中,转置运算符至关重要。如果正确完成ii是标量。否则你会收到错误

  

使用strcmp时出错输入必须大小相同或任何一个都可以   标量

答案 1 :(得分:1)

我认为您需要的是新的表类R2013b:

>> x = {'Hi', 'Med', 'Hi', 'Low'; 'A', 'D', 'A', 'C'; '8', '3', '9', '9'; '1', '1', '1', '2'}';
>> t = cell2table(x)

t = 

     x1      x2     x3     x4 
    _____    ___    ___    ___

    'Hi'     'A'    '8'    '1'
    'Med'    'D'    '3'    '1'
    'Hi'     'A'    '9'    '1'
    'Low'    'C'    '9'    '2'

>> slice = t(strcmp(t.x2,'A'),:)

slice = 

     x1     x2     x3     x4 
    ____    ___    ___    ___

    'Hi'    'A'    '8'    '1'
    'Hi'    'A'    '9'    '1'

>> 

有关详细信息,请查看表类here

如果您想对表的所有唯一值执行此操作,则可以使用cellfun:

>> slices = cellfun(@(value) t(strcmp(t.x2,value),:), unique(t.x2),'UniformOutput',false)

slices = 

    [2x4 table]
    [1x4 table]
    [1x4 table]

>> slices{:}

ans = 

     x1     x2     x3     x4 
    ____    ___    ___    ___

    'Hi'    'A'    '8'    '1'
    'Hi'    'A'    '9'    '1'


ans = 

     x1      x2     x3     x4 
    _____    ___    ___    ___

    'Low'    'C'    '9'    '2'


ans = 

     x1      x2     x3     x4 
    _____    ___    ___    ___

    'Med'    'D'    '3'    '1'

>> 

在这种情况下,您将t.x2的每个唯一元素传递给此函数。统一输出必须为false,以便cellfun不会尝试将表连接在一起,而是将表的每个切片放入其自己的单元格中。