mean of tables in cells

조회 수: 2 (최근 30일)
Jan Lettner
Jan Lettner 2018년 11월 28일
편집: Adam Danz 2019년 6월 23일
Hello everyone
For a project, I made some measurements, which I want to edit in Matlab. Since the table height is of different length, I want to fill the rest of the tables with NaN. But that doesn't work like I want to. Tables are stored in cells.
for k=1:length(Values)
while height(Values{1,k}) < 51
E = NaN*ones(1,2);
Values{1,k} = [Values{1,k};E];
end
end
The other problem occurs, when I want to calculate the mean.
for k=1:length(Values)
A(k)=mean(Values{1,k}(:,2));
end
I get this error:
Error using sum
Invalid data type. First argument must be numeric or logical.
Error in mean (line 127)
y = sum(x, dim, flag) ./ mysize(x,dim);
Error in mittelwertbildung_22a (line 8)
A(k)=mean(Values{1,k}(:,2));
The first value is definitely a numeric value. So I don't know, where the problem is. I appreciate every help I can get. Thanks in advance guys
  댓글 수: 3
Guillaume
Guillaume 2018년 11월 28일
Are your Values{k} actual matlab tables or are they plain matrices. The code you've posted would not work with actual tables.
A few notes:
  • don't use 2D notation if your cell array is a vector. Use Values{k} instead of Values{1, k}. The former will work whether Values is a column or row vector, the latter will error. It's also shorter to type.
  • E= NaN*ones(1, 2), is a slower way of generating E = NaN(1, 2). To make your code future proof it would be better to make that NaN matrix the same width as the matrix you're appending it to, so even better would be
E = NaN(1, size(Values{k}, 2));
  • I'd recommend you use numel instead of length. Then it really doesn't matter whether Values is a row cell array, a column cell array or even a ND cell array.
With regards to your question, what is the output of
cellfun(@isnumeric, Values)
Fabrice Lambert
Fabrice Lambert 2019년 6월 23일
I have a similar problem. Using the OP's example, Values{1,k}(:,2) is a table, so not a valid input for mean. However, mean(Values{1,k}{:,2}) does not work either. How do you (one line) extract data from a table within a cell to do statistics on them, without using table2array etc.?

댓글을 달려면 로그인하십시오.

답변 (1개)

Adam Danz
Adam Danz 2019년 6월 23일
편집: Adam Danz 2019년 6월 23일
You can adapt this functional demo to your needs and if it doesn't work with your data, please tell us how your data differ from the demo data.
Values = {table((1:20)',(1:20)'); table((1:22)',(1:22)')};
dth = 26; %desired table height (51 in your case)
A = zeros(size(Values));
for k = 1:length(Values)
nanpad = array2table(nan(26-height(Values{k}),width(Values{k})), ...
'VariableNames',Values{k}.Properties.VariableNames);
Values{k} = [Values{k};nanpad];
A(k) = mean(Values{k}{:,2},'omitnan');
end

카테고리

Help CenterFile Exchange에서 Standard File Formats에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by