Drexel dragonThe Math ForumDonate to the Math Forum



Search All of the Math Forum:

Views expressed in these public forums are not endorsed by Drexel University or The Math Forum.


Math Forum » Discussions » Software » comp.soft-sys.matlab

Topic: how to find unique rows and calculate the average.
Replies: 9   Last Post: Apr 12, 2013 6:31 PM

Advanced Search

Back to Topic List Back to Topic List Jump to Tree View Jump to Tree View   Messages: [ Previous | Next ]
dpb

Posts: 8,298
Registered: 6/7/07
Re: how to find unique rows and calculate the average.
Posted: Apr 10, 2013 8:37 PM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

On 4/10/2013 4:10 PM, Alan Hitch wrote:
> dpb <none@non.net> wrote in message <kk2k8a$h1m$1@speranza.aioe.org>...
...

>> Well, not seeing what you tried can't try to fix it, but one
>> straightforward approach...
>>

>> >> type 'alan.dat'
>>
>> 3BAB Brackish 27-Oct-04 PAPU 2 Fall 2004 3BAB38287PAPU 35 25 9 0 1 0 0
>> 0 0 0 0
>> 3BAB Brackish 27-Oct-04 POLA 2 Fall 2004 3BAB38287POLA 79 46 19 9 5 0
>> 0 0 0 0 0

...


>> >> fid=fopen('alan.dat','rt');
>> >> C=textscan(fid,[repmat('%*s',1,7) '%s'

>> repmat('%d',1,11)],'collectoutput',1);
>> >> fid=fclose(fid);
>> >> u=unique(C{1});
>> >> for i=1:length(u),m=mean(C{2}(strcmp(C{1},u(i)),1));disp([u(i) m]),end

>> '3BAB38287CYVA' [11]
...
>> '3BAB38287POLA' [79]
>> >>
>>
>> Note I didn't worry about the header and for simplicity of demo just
>> threw away all the data columns up to the uniqeID one. Then used
>> 'collectoutput' to put rest in a single cell.
>>
>> Then we found the unique IDs that are in the file (of which there is
>> only one of each in the sample and ran a loop over it to find the mean
>> by using a logical vector returned by strcmp as the row index into the
>> data. I chose the first column arbitrarily.
>>
>> Salt to suit for your case, of course...

...

> Thanks for responding. I neglected to tell you that the data is a cell
> array with different data types and textscan only works with double or
> string. I read the data in using xlsread and was using the raw data. I
> am relatively new to MatLab. How do I convert the cell array into a
> double or string? I tried using cell2mat but the contents of my
> cellarray are different data types.


textscan() can read whatever you give it the formatting for; see above
that reads your file as you said it was/is. All you need is to use the
appropriate 'headerlines',N option to skip them.

Given the above you have

3BAB Brackish 27-Oct-04 PAPU 2 Fall 2004 3BAB38287PAPU

a 2 strings, a date (read as a string also is simplest to deal with), a
string, an integer, a string, integer, string followed by 8 numerics.

Expand the format string I gave as needed to return any/all fields you
wish/need; the 'collectoutput' flag will put them into two cells one
containing the strings, the other the values.

I don't see where the problem is; why can't you use what gave [almost]
directly?

--




Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© Drexel University 1994-2014. All Rights Reserved.
The Math Forum is a research and educational enterprise of the Drexel University School of Education.