[HELP] How to seperate cell with values greater than 230 into new cell.

1 view (last 30 days)
Hi
i have a problem seperating the Cell values with values greater than 230 into a new cell and values less than into another cell. i have data located in a 137242x1 Cell called V. and i want values bigger than 230 volt. to be imported into a new cell called Vnew.
This is supposed to be simple, but whenever i use > i get Error: Undefined function 'gt' for input arguments of type 'cell'.
its annoying...please help

Accepted Answer

Marta Salas
Marta Salas on 18 Mar 2014
Edited: Marta Salas on 18 Mar 2014
Not efficent, but it will do the job:
v = {231.06;231.37;227.39;227.8}
thresh = 230;
vidx = cellfun(@(x) x > thresh, v)
for i=1:size(vidx)
if(vidx(i) ==1)
v{i,2} = v{i,1};
end
end
  1 Comment
awda
awda on 18 Mar 2014
Thank you, this worked. i tried others method, but this was the one i wanted :D. thanks man

Sign in to comment.

More Answers (5)

Kevin Claytor
Kevin Claytor on 17 Mar 2014
cellfun is great for operating on cells;
v = {1,3,400, 3, 400, 5}
thresh = 230;
vidx = cellfun(@(x) x > thresh, v)
vnew = v(vidx)

dpb
dpb on 17 Mar 2014
You have to dereference the content of the cell -- "use the curlies, Luke".
newV={V{:}>230);
See documentation on using cell arrays for more details/examples.
cellfun is useful, but overkill for the single case.
  2 Comments
awda
awda on 17 Mar 2014
Thanks for answering, but i am afraid this does not do anything...i have tried that before. the errors i get is either:
Error using > Too many input arguments.
OR
Undefined function 'gt' for input arguments of type 'cell'.
dpb
dpb on 18 Mar 2014
Sorry, overlooked that it's a cell array instead a cell with double array. Use the [ ] to enclose the returned list.
newV={[V{:}]>230);
See "comma list" in the doc for more on using the results from cell arrays.

Sign in to comment.


awda
awda on 17 Mar 2014
Edited: awda on 17 Mar 2014
i an afraid non of the above is working. i tried cellfun still no luck.
but maybe i have to clarify the question abit more :) here is an example on the picture attached.
i have all the data into 1 aray cell..i want the values with over 230 to be moved or copied into a new cell named newV.
thanks for help

awda
awda on 18 Mar 2014
I thought it worked, but it did not :(..i activated V instead of ur v. but it stated an error. however i changed my cell into double...since it was string.

dpb
dpb on 18 Mar 2014
Looks like your first cell isn't numeric but text. Use
Vnew=V([false [V{2:end}]>230]);
where the extra false in the resulting logical addressing vector accounts for the "off by one" error since not using the first entry.
A trivial example here...
>> V
V =
[0.0497]
[0.9027]
[0.9448]
...
[0.3692]
[0.1112]
[0.7803]
>> Vnew=V([false [V{2:end}]>0.5])
Vnew =
[0.9027]
[0.9448]
[0.9001]
[0.7803]
>>

Categories

Find more on Cell Arrays in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!