前段时间我问了这个问题:Automatic split of character matrix according to a column values into variable number of new dataframes
对于那个问题,函数split
是完美的答案,现在,我正在试图在Matlab中做同样的事情,并且找不到任何相同的函数。
所以,它很简单,我的问题是:是否有任何函数与Matlab中的R split
函数相同?如果没有,我怎么能完全按照Matlab中的链接问题提出要求?
答案 0 :(得分:1)
unique
和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时出错输入必须大小相同或任何一个都可以 标量
答案 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不会尝试将表连接在一起,而是将表的每个切片放入其自己的单元格中。