说我有:
A = {'a.java' 1;'a.java' 2; 'b.java' 1; 'b.java' 0; 'a.java' 4; 'c.java' 6};
我想根据第一列相似度累积第二列数。
我想得到:
B = {'a.java' 1+2+4; 'b.java' 1+0; 'c.java' 6}
我怎样才能做到这一点?
非常感谢,
答案 0 :(得分:6)
您可以使用UNIQUE和ACCUMARRAY函数轻松完成此操作:
>> [uniqueValues,~,index] = unique(A(:,1));
>> B = [uniqueValues num2cell(accumarray(index,[A{:,2}]))]
B =
'a.java' [7]
'b.java' [1]
'c.java' [6]
答案 1 :(得分:3)
在A中找到唯一键(unique
函数可以方便地返回从A中的键到唯一键集中的条目的映射),然后迭代这些键。
[u,i1,i2]=unique(A(:,1)); % i1 is not needed, actually
Avalues = cell2mat(A(:,2)); % convert numerical part of cell array to matrix
for i=1:max(i2)
u{i,2}=sum(Avalues(i2==i));
end
这也可以扩展为在单元格数组中的多个数据列上逐列工作。
答案 2 :(得分:3)
这样的事情:
[a b c] = unique({A{:,1}});
for i=1:length(a)
B{i, 1} = a(i);
B{i, 2} = sum([A{find(c==i), 2}]);
end