我在Matlab中有一个Nx4单元格数组,如下所示:
id1 word11 word12 word13
....
id2 word21 word22 word32
....
idN wordN1 wordN2 wordN3
其中四列中的每一列都包含一个字符串,第二列(word11... wordN1)
可以包含重复值。我想得到另一个单元格数组,但根据第二列有唯一的行。因此,在上一个示例中,如果word21
与wordN1相同,则生成的数组应仅包含以下两行(与重复的哪一行无关;)
id1 word11 word12 word13
....
idN wordN1 wordN2 wordN3
我尝试unique(cellArray{2})
但它只返回带有唯一值的第二列,我想要整行。我怎么能这样做?
由于
答案 0 :(得分:3)
我相信以下内容应该这样做:
Z = {'a', 'b'; 'a', 'c'; 'a', 'c'; 'a', 'd'; 'a', 'b'};
[~, I1] = unique(Z(:, 2));
I1 = sort(I1);
Soln = Z(I1, :);
解释?我使用unique
的可选附加参数来获取第二列中唯一元素的索引。然后我sort
这个索引,以便我们可以保留Z
的原始排序。最后,我检索Z
索引的I1
行。
注意,sort
实际上保留原始排序而不是对其进行排序有点不直观:-)原因是I1
包含唯一元素的行索引。因此,排序它按照从最小到最大的顺序返回行索引,从而保留Z
中的原始顺序。