Finding the mean of subsets within cellarrays

on 28 Oct 2012

Andrei Bobrov (view profile)

Hello,

I have a panel dataset as a cellarray and one cell column represents the index of a data subset within this array (long format). Now I want to create a vector with the mean of each subset. I tried the following but this does not work completely and I would be more than happy if you could help me out here. I did that several times in STATA, but there you can handle panel data directly and specify an index variable in your dataset, obviously you have to do the work in Matlab completely by yourself. :(

Regards!

```x = {'A',2.5;'A',5.0;'B',2.6}
```
```y = unique(x(:,1))
```
```mean = zeros(length(y),1)
```
```for i = 1:length(y)
mean(i) =  mean(x(x{:,2}==y(i)));
end
```

Products

No products are associated with this question.

Andrei Bobrov (view profile)

on 29 Oct 2012

```[a,c,c] = unique(x(:,1));
avgx = [a,num2cell(accumarray(c,cell2mat(x(:,2)),[],@mean))];
```

Jing (view profile)

on 29 Oct 2012

Hi,

In your code, you can't index into a cell array using ':', and if you want to use the build-in MEAN function, you should not define a variable as 'mean', because MATLAB will treat it as a variable first. I think the following code can complete your goal.

```x = {'A',2.5;'A',5.0;'B',2.6};
y = unique(x(:,1))
avgx= zeros(length(y),1);
for i = 1:length(y)
avgx(i)=mean(cell2mat(x(strcmp(y{i},x(:,1)),2)));
end
```

on 29 Oct 2012
Edited by Léon

Léon (view profile)

on 29 Oct 2012

This is exactly what I've been searching for and the speed of that is amazing. Thank you very much! :)

May I ask a question that builds on top of that?

Is it possible to apply the function on a sub-sub-set as well? Considering we have an additional date vector:

```day = (28;29;30);
```

can we compute the mean within the subgroup, but day wise?

Jing

Jing (view profile)

on 30 Oct 2012

What do you mean by day-wise?

Join the 15-year community celebration.

Play games and win prizes!

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi