使用双矩阵和元素中的元素获取新变量给定特定条件的单元阵列

时间:2014-05-24 17:09:34

标签: matlab double cell string-matching

我正在使用Matlab,我有一个包含5列和50万行的单元格数组和一个带有列和大约25万行的双矩阵。我们称它们为A和B.A同时包含字符串和数字元素。

虽然行数和顺序不相等,但在两个单元格中都有一个共同的元素。我想要的是每次验证条件时从单元阵列A和双矩阵B获得具有X列的新变量(双或单元)。如果列Y(来自A)和Z(来自B)匹配,则条件是。例如: 单元阵列A:

  

'19970102''00000127''MORRISON'' 00148''BA'

     

'19970102''00010121''GALLITANO A''00001382''ALEX'

     

'19970102''00031783''HOPSON''00039''EDW'

     

'19970102''00040486''STRUM''00003''CHI'

     

'19970102''00003337''KATICA H''00001929''RAYMOND'

双矩阵B:

  

19970101 31783 183

     

19970101 127 235

     

19970101 18290 183

     

19970101 835 01

     

19970101 40486 1976

我想在'新'变量中得到什么:

  

19970101 31783 183'19970102''00031783''HOPSON''00039''EDW'

     

19970101 127 235'19970102''00000127''MORRISON'' 00148''BA'

     

19970101 18290 183

     

19970101 835 01

     

19970101 40486 1976'19970102''00040486''STRUM''00003''CHI'

任何人都可以帮助我吗?非常感谢您的可用性。

1 个答案:

答案 0 :(得分:1)

我们假设您将A的第2列与B的第2列匹配.A是单元阵列,B是矩阵。首先,您需要将单元格数组中的字符串转换为数值。

A2 = cellfun(@str2double, A(:,2));

这将产生一个向量。现在,要匹配值,请使用intersect:

[both, inA, inB] = intersect(A2, B(:,2));

将B转换为单元格数组以进行连接:

Bcell = reshape(mat2cell(B(:), ones(numel(B),1)), size(B));

Concat匹配行:

[Bcell(inB,:) A(inA,:)]

要获得不匹配的剩余行B(或A):

B(setdiff(1:size(B,1), inB),:)

如果不回答您的问题,我希望这些提示有所帮助。祝你好运!