Remove empty cells and values for correlations

Hi,
I have a 32x2 cell and I would like to do a correlation for the values in the first column with the values in the second column. However, there are blank cells in the first column. Could anyone help me find a way to do a correlation that excludes all the blank cells and their corresponding values in the second column?
Thanks!

2 comentarios

"Blank cells" is not quite specific enough. Could you post a very small example (maybe 4x2 or so) that illustrates your input cell array? For example, do you mean
C = cell(4,2);
C{1,1} = 3;
C{1,2} = 4;
C{2,2} = 4;
C{3,1} = 6;
C{3,2} = 5;
C{4,1} = 4.1;
C{4,2} = 6.2;
where the 2nd row of the first column is an empty cell?
Or do you mean something else by "blank"?
Thang  Le
Thang Le el 17 de Jun. de 2014
Editada: Thang Le el 17 de Jun. de 2014
I'm sorry for not being specific. An example would be:
[45] [20]
[16] [32]
[] [10]
[17] [6]
So (3,1) is an empty cell. So this is the same as your example, I think.

Iniciar sesión para comentar.

 Respuesta aceptada

Star Strider
Star Strider el 17 de Jun. de 2014
Does this do what you want?
CData = {45 20; 16 32; [] 10; 17 6};
CE = cellfun(@isempty, CData(:,1));
Data = cell2mat(CData(~CE,:));
[R, P] = corrcoef(Data)

6 comentarios

Thang  Le
Thang Le el 17 de Jun. de 2014
Thank you Star, Strider! This is indeed what I was looking for.
Star Strider
Star Strider el 18 de Jun. de 2014
My pleasure!
Thang  Le
Thang Le el 20 de Jun. de 2014
Hi Star Strider, slight adjustment to my question: what if either column or both columns have [] (as opposed to just the first colmn as in my original question). How would I change the code to account for those possibilities? I've tried several things but usually got the Index exceeds matrix dimensions error.
It seems that none of the logical indexing that I find so useful with double arrays works with cell arrays (or at least it doesn’t work for me with cell arrays). Finding all the rows with a missing value was easy enough (my ‘CE’ variable). I finally resorted to a loop to collect only the data with complete rows:
CData = {45 20; 16 32; [] 10; 17 6; 25 []};
CE = cellfun(@or, CData(:,1), CData(:,2), 'Uni',0);
k2 = 0;
for k1 = 1:size(CData,1)
if ~isempty(CE{k1})
k2 = k2+1;
CD(k2,:) = CData(k1,:);
end
end
[R, P] = corrcoef(cell2mat(CD))
It works, but I’m sure there’s a more efficient way to do it.
Thang  Le
Thang Le el 23 de Jun. de 2014
Thank you again, Star Strider!
Star Strider
Star Strider el 23 de Jun. de 2014
My pleasure!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Preguntada:

el 17 de Jun. de 2014

Comentada:

el 23 de Jun. de 2014

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by