我有3个载体。
第一个单元被称为'代码'是25 x 1向量,其中每个值都是唯一的。 第二个向量称为'country'是n x 1双向向量。 第三个向量称为'sales'是n x 1双向向量。 n是约。 3500。第二个和第三个向量将始终包含相同的行数。
我想要做的是在第一个向量中获取每个代码的总销售额。请参阅下面的示例。
codes
3659
7852
3662
1448
country sales
3659 10
1448 96
3659 15
3662 12
3662 2
我想要的结果,
country sales
3659 25
1448 96
3662 14
7852 0
答案 0 :(得分:3)
你可以使用accumarray
功能来完成这项工作,这正是这种工作的目的:
[~, ii] = ismember(country,codes);
totalSales = accumarray(ii, sales, [], @sum, 0);
result = [ codes totalSales ];
请注意,这会将结果排序为原始代码,与您的示例不同。
答案 1 :(得分:2)
for i = 1:length(codes)
newcountry(i) = codes(i);
newsales(i) = sum(sales(country==codes(i)));
end
country==codes(i)
给出一个用零填充的向量,除非在country = codes(i)的索引处,在这种情况下有一个1. sales(country==codes(i))
返回{{1}的销售条目}与country
相同。 codes(i)
会返回sum(sales(country==codes(i)))
与country
相同的索引的所有销售额的总和。