String 根据两个条件删除行-Matlab

String 根据两个条件删除行-Matlab,string,matlab,cell,conditional-statements,String,Matlab,Cell,Conditional Statements,我在Matlab中有一个按公司字母顺序排列的单元格类型变量。每个公司对应不同且重复的C1s和C2s。对于每个公司,我想删除重复的C2s(和相应的行)。方法是选择D2距离D1最远的行 初始单元格: 公司C1 C2 D1 D2 D3 “ACRO”“01464”“043605”“19961231”“19970212”“19970401” “ACRO”“01464”“043605”“19961231”“19970119”“19970313” “ACMJ”“00118”“043605”“19961231”

我在Matlab中有一个按公司字母顺序排列的单元格类型变量。每个公司对应不同且重复的C1s和C2s。对于每个公司,我想删除重复的C2s(和相应的行)。方法是选择D2距离D1最远的行

初始单元格:

公司C1 C2 D1 D2 D3
“ACRO”“01464”“043605”“19961231”“19970212”“19970401”
“ACRO”“01464”“043605”“19961231”“19970119”“19970313”
“ACMJ”“00118”“043605”“19961231”“19970114”“19970219”
“ACMJ”“01464”“000151”“19961231”“19970121”“19970218”
“ACMJ”“00192”“007960”“19961231”“19970523”“19970728”

最终单元:

'ACRO'01464'043605'19961231'19970212'19970401'
“ACMJ”“00192”“007960”“19961231”“19970523”“19970728”

有人能帮我吗?提前多谢。

试试这个

a = initial_cell;
b = (abs(str2num(cell2mat(a(:,4))) - str2num(cell2mat(a(:,5)))));
[temp ind1] = sort(b);
s  = a(ind1(end:-1:1),:);
[temp1 ind2 temp2] = unique(strcat(s(:,1),s(:, 3)));
out_cell = s(ind2,:);
输出为

out_cell = 

'ACMJ'    '01464'    '000151'    '19961231'    '19970121'    '19970218'
'ACMJ'    '00192'    '007960'    '19961231'    '19970523'    '19970728'
'ACMJ'    '00118'    '043605'    '19961231'    '19970114'    '19970219'
'ACRO'    '01464'    '043605'    '19961231'    '19970119'    '19970313'

请注意,
out\u cell
在该输出中按公司排序,而在问题所述的输出中不按公司排序。如果您需要,请通知我。

一种可能性是将单元格按单位分割,然后我只需应用日期的条件。我会这样尝试,对我来说很简单,可能效率不高。创建一个新列,使用值
abs(D1-D2)
,根据该列对数组进行排序,该列在最低的行索引上具有最高值,然后沿第一列使用unique嘿!我用不同的方法计算绝对值:
a=xx;b=(abs(cellfun(@减号,a(:,8),a(:,7)));b=num2单元(b);a(:,end+1)=b但是你的方式更简洁!非常感谢。它工作得很好!有一件事,我在你的第二行中去掉了str2num,因为Matlab给了我错误。(可能只是在我的代码中)非常感谢!)我正在验证代码,尽管它正在工作,但每个公司只剩下一个
C2
!这不是我的目标!我希望每个公司都有几个C2s,我只是不希望他们在自己内部重复!对不起,我没有让人明白我的意思!我现在就要研究这个话题了@user3557054请尝试了解,我已将答案更改为选择唯一的C2值,之前它选择的是唯一的公司值,这是我的错误,我没有正确阅读问题。请告诉我是否还有一些错误,我已经尝试过类似于您编辑的内容:
[temp1 ind2 temp2]=unique(cell2mat(s(:,3)),'sorted')
,但我意识到这也是错误的!因为我想要的是两个条件。例如:公司ACMJ将有10个不同的C2值,但这并不意味着其中一个也不会出现在公司ACRO中。所以我不能按C2排序!我将尝试使用
&
@user3557054尝试编辑后的答案,我认为它现在可以工作了,很抱歉我之前没有检查它