簡體   English   中英

在Matlab中使用字符串元素跟蹤單元格數組中的更改

[英]Track changes in a cell array with string elements in Matlab

我有一個5列和大約5000行的帶有字符串元素的單元格數組。 例如:

1997查爾斯·豪斯材料化學

年份從1997年到2013年,而歲月流逝,您會發現重復。 我想得到的是一個新的單元格數組,其中第二列和第三列的組合發生了變化。 例如原始細胞陣列:

1997年Charles House Materials Chemicals%initial

1997麗塔辦事處金融銀行%initial

1998麗塔辦事處金融銀行%不變

1999年查爾斯房屋材料化學品%不變

第二列中的2000 Charles Office Materials Chemicals%change

2001年查爾斯辦公材料化學品%未更改

2003麗塔之星金融銀行第二列的百分比變化

2005查爾斯城堡材料化學公司第二欄的百分比變化

第2列中的2010 Rita Moon金融銀行百分比變化

我希望我的新陣列能為我提供第一行/原始行以及觀察到更改的情況。 例如輸出:

1997查爾斯房屋材料化學品

1997麗塔辦事處金融銀行

2000查爾斯辦公材料化學品

2003麗塔之星金融銀行

2005查爾斯城堡材料化學品

2010麗塔月亮金融銀行

我的問題主要與處理字符串有關。 如果有人可以幫助我,我將不勝感激。 非常感謝您的光臨。

%// 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

首先,我過濾掉第一列,因為年份無關緊要。 然后,您必須將前一行與下一行進行比較。 這是使用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,:);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM