我有一个包含5列和大约5000行字符串元素的单元格数组。 E.g:
1997 Charles House Materials Chemicals
这些年从1997年到2013年,你会发现重复,而岁月经过。我想得到的是一个新的单元格数组,其中第二列和第三列的组合发生了变化。例如。原始单元格数组:
1997 Charles House Materials Chemicals%initial
1997 Rita Office Financial Bank%initial
1998 Rita Office Financial Bank%没有变化
1999 Charles House Materials Chemicals%没有变化
2000 Charles Office Materials Chemicals第二栏中的变化%
2001 Charles Office Materials Chemicals%没有变化
2003 Rita Star Financial Bank第2栏的变化
2005查尔斯城堡材料化学品第2栏的变化%
2010 Rita Moon金融银行第二栏的变化%
我想让我的新数组给我第一行/原始行和你的案例 观察变化。例如。输出:
1997 Charles House Materials Chemicals
1997 Rita Office Financial Bank
2000 Charles Office Materials Chemicals
2003 Rita Star Financial Bank
2005 Charles Castle Materials Chemicals
2010 Rita Moon金融银行
我的问题主要与我处理字符串的事实有关。如果有人可以帮助我,我会很感激。非常感谢您的可用性。
答案 0 :(得分:2)
<强>代码强>
%// Assuming input_cellarr is the input cell array
[~,~,col2id] = unique(input_cellarr(:,2),'stable')
[~,~,col3id] = unique(input_cellarr(:,3),'stable')
[~,unqrows] = unique([col2id col3id],'rows','stable')
out = input_cellarr(unqrows,:) %// Desired output
答案 1 :(得分:0)
首先,我过滤了第一栏,因为这一年并不重要。然后,您必须将前一行与下一行进行比较。这是使用X(1:end-1,2:end)
和X(2:end,2:end))
完成的。只有在行明显相等的情况下,才会发生变化。
changes=all(strcmpi(X(1:end-1,2:end),X(2:end,2:end)),2)
%at this point we are missing the first line
changes=[true;changes]
%finally use logical indexing to select the relevant data.
result=X(changes,:);