In the given excel I have 4 columns I want to split the data with respect to column 1 name as minutes and save the data of the other corresponding columns name with D1, D2, D3.
the condition should be that the data start from zero in column 1 and select the data upto next zero occure. save this data in one cell and again start saving data start from the next zero upto another zero occure.

7 comentarios

Rik
Rik el 27 de Oct. de 2021
A naive approach would be to do this with a loop row by row. When you have working code with a loop it will be likely be easy to speed this up (e.g. with something like find(data>0,1,'first')).
What did you try?
Adil Sardar
Adil Sardar el 27 de Oct. de 2021
Editada: Rik el 27 de Oct. de 2021
I tried a simple loop but I am unable to solve it. I used the loop as given but they select all the data except 0.
for i = length(minute)
if minute(i) ~= 0
Save_data = minute(i)
end
end
Just like this but this is not correct. I don't what type of condition I use.
Rik
Rik el 27 de Oct. de 2021
Write it out: what should happen when? What should be done for each row?
If the value of minute is 0, start a new cell and make that the current cell. If not, stay in the current cell.
Then add the value of your data to the current cell.
How would you write this in code? Also, please use the layout options of the editor.
Adil Sardar
Adil Sardar el 27 de Oct. de 2021
I want to save the data of minute column start from first zero upto another zero and save in a cell.
Adil Sardar
Adil Sardar el 27 de Oct. de 2021
Adil Sardar
Adil Sardar el 27 de Oct. de 2021
Just like the above image I want to save the data like this
Rik
Rik el 27 de Oct. de 2021
I understand what you want, now I want to see if you can translate the text I wrote to code. Think of what should happen step by step. Can you understand why the code you posted didn't work?

Iniciar sesión para comentar.

 Respuesta aceptada

Mathieu NOE
Mathieu NOE el 27 de Oct. de 2021

0 votos

hello
could not load your excel file , so I created a dummy one (attached FYI)
the table is splitted into cells according to first zero in minute column
you can also convert tables into other structure if you prefer
hope it helps
clc
clearvars
T = readtable('test1.xlsx');
[m,n] = size(T);
minuts = T.Min;
%% define index corresponding to first zeros (repeating)
ind = find(minuts<eps);
dd = [0; diff(ind)];
p = find(diff(ind)>1);
ind_first_zeros = [ind(1); ind(p+1)];
nb_cells = numel(ind_first_zeros);
%% export table extracts in individual cell
for ci =1:nb_cells
ind_start = ind_first_zeros(ci);
if ci < nb_cells
ind_stop = ind_first_zeros(ci+1)-1;
else % last block of data finish at end of file
ind_stop = m;
end
data_cell{ci} = T(ind_start:ind_stop,:);
end

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Productos

Etiquetas

Preguntada:

el 27 de Oct. de 2021

Comentada:

el 28 de Oct. de 2021

Community Treasure Hunt

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

Start Hunting!

Translated by