使用Matlab中的字符串元素跟踪单元数组中的更改

时间:2014-05-24 14:41:53

标签: arrays string matlab cell

我有一个包含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金融银行

我的问题主要与我处理字符串的事实有关。如果有人可以帮助我,我会很感激。非常感谢您的可用性。

2 个答案:

答案 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,:);