1

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

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

split所以,很简单,我的问题是:有没有与Matlab中的 R 函数一样的函数?如果没有,我怎么能完全按照 Matlab 的链接问题中的要求做呢?

4

2 回答 2

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'

>> 

有关更多信息,请查看此处的表类

如果您想对表的所有唯一值执行此操作,您可以利用 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 的每个唯一元素传递给此函数。统一输出必须为假,以便 cellfun 不会尝试将表格连接在一起,而是将表格的每个切片放入自己的单元格中。

于 2013-09-19T22:04:34.397 回答
1

uniqueand函数适用于元strcmp胞数组。怎么样的东西

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 时出错输入的大小必须相同,或者任何一个都可以是标量

于 2013-09-19T16:13:49.963 回答