2012-07-08 39 views
0

的SUMIFS一列的我有这样另外某些条件在另一个式柱,如Excel

A=[ 1 2; 2 3; 3 4; 4 5; 5 6; 6 8; 7 9; 8 5; 9 4] 

矩阵现在我要添加的第二列中的条件是,如果限制= 0,并且间隔= 3和limit = limit + interval,或者换句话说,当列1的值,范围如0到3,3到6,6到9和9到12时,我必须求和第2列,列的对应值2.

我的解决方案将是这样的

range- sum 
0 to 3 9 
3 to 6 19 
6 to 9 18 

就像我有一个7000x2左右的矩阵。代替范围,也可以给出序列号。

这只是一个例子。

回答

5

这是ACCUMARRAY的工作。首先,构建应加在一起的值的索引数组,然后调用accumarray

%# create test data 
A=[ 1 2; 2 3; 3 4; 4 5; 5 6; 6 8; 7 9; 8 5; 9 4]; 

%# create indices from first column 
%# if you have indices already, you can use them directly 
%# or you can convert them to consecutive indices via grp2idx 
groupIdx = ceil(A(:,1)/3); %# 0+ to 3 is group 1, 3+ to 6 is group 2, etc 

%# sum 
result = accumarray(groupIdx,A(:,2),[],@sum) 

result = 
    9 
    19 
    18 

编辑

如果你需要,而不是在范围内的数项,它仍然是一个accumarray的工作,只有你不累积到一个总和,但成直方图。

%# use test data, groupIdx from above 
A=[ 1 2; 2 3; 3 4; 4 5; 5 6; 6 8; 7 9; 8 5; 9 4]; 
groupIdx = ceil(A(:,1)/3); %# 0+ to 3 is group 1, 3+ to 6 is group 2, etc 

%# find values to count 
values2count = unique(A(:,2)); 

%# count the values 
countsPerRange = accumarray(groupIdx,A(:,2),[],@(x){hist(x,values2count)}) 


%# inspect the counts for range #1 
[values2count,countsPerRange{1}'] 

ans = 

    2  1 
    3  1 
    4  1 
    5  0 
    6  0 
    8  0 
    9  0 
+0

谢谢乔纳斯,这是正常工作。 – 2012-07-09 15:28:20

+0

http://stackoverflow.com/questions/11395823/addition-of-one-column-with-certain-condition-in-another-colum-like-sumifs-of-e plz帮助解决这个问题 – 2012-07-09 15:29:15

+0

@DibyenduPal:我已经为您的计数问题添加了一个解决方案 – Jonas 2012-07-09 16:22:43

相关问题