identifying and removing a double within a structure

I'm trying to produce a mean of a column within a structure. the problem is that within this column one of the rows is a double 1X2.
Another problem is that the next step would be to get this mean for each participant (each participant produces a structure). Some of the participants may not have a double within or may have more than one, or have several doubles with different sizes.
When there is a double, I want to get only the last input number and ignore the rest.
I tried several solutions but eventually I got stuck.
Can someone put me in the right direction on how to identify a double within a structure and removing parts of it?
Thanks in advance!!!

댓글 수: 8

Jonas
Jonas 2021년 7월 2일
편집: Jonas 2021년 7월 2일
so do you have an N dimensional struct with a field which contains the double(s) ?
yes, exactly - checking for size returns 18 1 10 (10 is the number of variables and 18 is rows).
checking for class returns 'struct'.
Checking for size and class of the variable I wanted, returns an error
Essentially no chance we're going to be able to figure out the details without a sample of the struct array you're trying to deal with. Attach a .mat file that illustrates the problem -- with the answer(s) expected and how arrived at.
thanks for replying! I attached the file I'm using.
The variable I want is EXPDATA.trials.responses_results
this is how it looks like:
And the answer I expect is 0.889.
I tried to struct2table and struct2cell, cell2mat ext, all resulted in errors eventually.
I was thinking the best approach would be a for loop where 'i' would be the row - if value is double - take the end value of double, else pull the value of row i in struct. Not sure how to pull this off though.
Jonas
Jonas 2021년 7월 2일
편집: Jonas 2021년 7월 2일
maybe you thought about something like that.
myStruct(1).myDoubleField=[1 2];
myStruct(2).myDoubleField=[1 2 3];
myStruct(3).myDoubleField=[1 3 8];
myStruct(4).myDoubleField=[4];
lastVals=zeros(numel(myStruct),1);
for nr=1:numel(myStruct)
lastVals(nr)=myStruct(nr).myDoubleField(end);
end
meanResult=mean(lastVals)
another possibility with cellfun
allFields={myStruct.myDoubleField};
lastVal =@(in) in(end);
mean(cellfun(lastVal,allFields))
yes! worked perfectly, thank you!
great. i move it down to the answers section

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

답변 (1개)

Jonas
Jonas 2021년 7월 3일
편집: Jonas 2021년 7월 3일
maybe you thought about something like that.
myStruct(1).myDoubleField=[1 2];
myStruct(2).myDoubleField=[1 2 3];
myStruct(3).myDoubleField=[1 3 8];
myStruct(4).myDoubleField=[4];
lastVals=zeros(numel(myStruct),1);
for nr=1:numel(myStruct)
lastVals(nr)=myStruct(nr).myDoubleField(end);
end
meanResult=mean(lastVals)
another possibility with cellfun
allFields={myStruct.myDoubleField};
lastVal =@(in) in(end);
mean(cellfun(lastVal,allFields))

카테고리

도움말 센터File Exchange에서 Structures에 대해 자세히 알아보기

제품

릴리스

R2020b

질문:

2021년 7월 2일

편집:

2021년 7월 3일

Community Treasure Hunt

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

Start Hunting!

Translated by