我正在使用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'
任何人都可以帮助我吗?非常感谢您的可用性。
答案 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),:)
如果不回答您的问题,我希望这些提示有所帮助。祝你好运!