Fatto salvo che la funzione "mean" consente sia di includere che escludere i valori "NaN", dal momento che in MatLab tuttel le righe di una matrice devono avere lo stesso numero di colonne, che La cosa più semplice che puoi fare, se proprio vuoi eliminare i valori "NaN" è creare una "struct" nella quale ogni campo(field) contenga i valori di una colonna.
In questo esempio viene creata la struttura "data_struct" con i campi:
data_struct.all_data ==> matrice completa
data_struct.column_x (x = i-esima colonna) ==> dati della i-esima senza "NaN"
data_struct.nan_column_x (x = i-esima colonna) ==> indice della riga della i-esima colonna nel quale era presente il valore NaN
Sfruttando la possibilità di definire i nomi dei campi in modo dinamico, puoi sostituire la generica stringa "column" con il nome della colonna che leggi dal file Excel.
Così come pupi definire in modo dinamico i nomi dei campi, puoi usare la funzione "fieldnames" () per accedere in modo dinamico ai campi che hai creato.
% Creazione di una matrice di esempio
m=randi(10,6)
% Inserimento di alcuni valori NaN
m(randi(36,6,1))=NaN
% Identificazione delle dimensioni della matrice originale
[rows,columns]=size(m)
% Creazione della struttura dati:
% data_struct.all_data ==> matrice completa
% data_struct.column_x (x = i-esima colonna) ==> dati della i-esima colonna
% senza "NaN"
% data_struct.nan_column_x (x = i-esima colonna) ==> indice della riga
% della i-esima colonna nel quale era presente il valore NaN
data_struct.all_data=m
for i=1:columns
data_struct.(['column_' num2str(i)])=m(~isnan(m(:,i)),i)
data_struct.(['nan_column_' num2str(i)])=find(isnan(m(:,i)))
end