求和&匹配不同大小的单元阵列

时间:2014-05-22 07:15:14

标签: arrays matlab string-matching cell-array

我有一个4016 x 4的单元格,名为' totalSalesCell'。前两列包含文本,其余两列是数字。

 1st field CompanyName
 2nd field UniqueID
 3rd field NumberItems
 4th field TotalValue

在我的代码中,我有一个循环,它在过去一个月的每周步骤中进行 - 即4循环。

在每个循环中,我的代码返回一个与totalSalesCell结构相同的单元格,名为weeklySalesCell,它通常包含与totalSalesCell不同的行数。

我需要做两件事。首先,如果weeklySalesCell包含一个不在totalSalesCell中的公司,则需要将其添加到totalSalesCell,我相信下面的代码将为我做。

    co_list = unique([totalSalesCell(:, 1); weeklySalesCell (:, 1)]);
    index = ismember(co_list, totalSalesCell(:, 1));
    new_co = co_list(index==0, :);
    totalSalesCell = [totalSalesCell; new_co];

我需要做的第二件事是不确定最好的方法是将weeklySalesCell数字字段添加到totalSalesCell。如上所述,单元格将在90%的时间具有不同的行号,因此不能应用简单的添加。以下是我希望实现的一个例子。

totalSalesCell                weeklySalesCell                  Result

co_id      sales_value        co_id      sales_value           co_id      sales_value
23DFG      5                  DGH84      3                     23DFG      5
DGH84      6                  ABC33      1                     DGH84      9
12345      7                  PLM78      4                     ABC33      1
PLM78      4                  12345      3                     12345      10
KLH11      11                                                  PLM78      8
                                                               KLH11      11

1 个答案:

答案 0 :(得分:1)

我相信以下代码必须处理您的两项任务 -

[x1,x2] = ismember(totalSalesCell(:,1),weeklySalesCell(:,1))
corr_c2 = nonzeros(x1.*x2)
newval = cell2mat(totalSalesCell(x1,2)) + cell2mat(weeklySalesCell(corr_c2,2))

totalSalesCell(x1,2) = num2cell(newval)
excl_c2 = ~ismember(weeklySalesCell(:,1),totalSalesCell(:,1))
out = vertcat(totalSalesCell,weeklySalesCell(excl_c2,:)) %// desired output

输出 -

out = 
    '23DFG'      [ 5]
    'DGH8444'    [ 9]
    '12345'      [10]
    'PLM78'      [ 8]
    'KLH11'      [11]
    'ABC33'      [ 1]