Matlab单元格数组到字符串向量 - 唯一

时间:2014-06-10 22:25:35

标签: arrays string matlab unique cell

坚持使用单元格阵列,因为我无法摆脱它...但是,对于你们这里的人来说,这将是一件容易的事。

所以这就是为什么: 我有一个数据集(数据),其中包含两个变量:A(数字)和B(单元格数组)。 不幸的是,我甚至无法重建问题,但我导入的表格看起来像这样:

data=dataset;
data.A = [1;1;3;3;3];
data.B = ['A';'A';'BUU';'BUU';'A'];

其中data.B是5x1类型的单元格,我无法重建

我现在想要的只是像

这样的独特行

ans = [1 A; 3 BUU; 3 A] 结果应该在数据集中,或者只是两个行相等的向量。

但唯一([dataA dataB],'rows')无法处理单元格数组,我无法在www中找到如何将单元格数组B简单地转换为字符串向量(它是否存在?)

cell2mat()对我不起作用,因为字长不同('A'对'BUU')。

虽然,我想学习两件事:将5x1单元格制作成字符串向量 并从数字和字符串(或单元格)中查找唯一的行。

非常感谢!

干杯多米尼克

2 个答案:

答案 0 :(得分:1)

问题是AB字段的类型不同。虽然它们可以连接成一个单元格数组,但unique无法处理它。像这样的案例的一般伎俩是"翻译"每个字段(列)的元素到唯一标识符,即数字。可以分别将unique应用于每个字段并获取其第三个输出来完成此转换。现在可以将获得的标识符连接成矩阵,使得该矩阵的每一行是"复合标识符"。最后,带有unique选项的'rows'可以应用于此矩阵。

所以,在你的情况下:

[~, ~, kA] = unique(data.A);
[~, ~, kB] = unique(data.B);
[~, jR] = unique([kA kB], 'rows');

现在将结果构建为(格式与data

result.A = data.A(jR);
result.B = data.B(jR);

或(2D单元格数组)

result = cat(2, mat2cell(data.A(jR), ones(1,numel(jR))), data.B(jR));

答案 1 :(得分:0)

这是我的解决方案

    tt.A = [1;1;3;3;3];
    tt.B = {'A';'A';'BUU';'BUU';'A'};

将整数转换为字符,然后合并并查找唯一字符串

   tt.C = cellstr(num2str(tt.A));
   tt.D = cellfun(@(x,y) [x y],tt.C,tt.B,'UniformOutput',0);
   [tt.F,tt.E] = unique(tt.D);

显示结果

   tt.F