String 根据两个条件删除行-Matlab
我在Matlab中有一个按公司字母顺序排列的单元格类型变量。每个公司对应不同且重复的C1s和C2s。对于每个公司,我想删除重复的C2s(和相应的行)。方法是选择D2距离D1最远的行 初始单元格: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”
公司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尝试编辑后的答案,我认为它现在可以工作了,很抱歉我之前没有检查它