How to use AND in an if loop to find the first repeated value
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
mcl1993
el 23 de Ag. de 2016
Respondida: Robert
el 23 de Ag. de 2016
I have a list of values and want to go through a csv file to find if any of the numbers in column 3 match any of the values in the list. If they do, i want to find the first time this value occurs (there are likely to be more than one matches to the list) and add together the value in column 6, the first time it occurs, to the value in column 6 in the next row.
for i = 1:length(value(:,3));
for j = 1:length(allowed_energies);
if value(i,3) == allowed_energies(j) AND if it is the first time it occurs;
value(i,6) + value(i+1,6);
end
end
end
0 comentarios
Respuesta aceptada
Adam
el 23 de Ag. de 2016
for j = 1:length( allowed_energies )
idx = find( value(:,3) == allowed_energies(j), 1 );
result = value( idx, 6 ) + value( idx + 1, 6 );
end
would do this, I think, although depending what you actually want to do with the result of adding those columns together you would want to alter it a bit. In your example code you just add them together and throw the result away. Which is also what I do above, but I give it a name first and then throw it away at least!
You may also be able to vectorize further to remove the remaining loop too, but I don't have the time to consider that one further.
0 comentarios
Más respuestas (1)
Robert
el 23 de Ag. de 2016
You can accomplish this with intersect. To illustrate, let's make an example file:
mydata = randi(9,[100,6]);
myfile = 'temp.csv';
csvwrite(myfile,mydata);
Then we can read it back in (if it is very big, you might want something faster than csvread) and compare its third column to the list of values using intersect. The first output will show us which values were and weren't found and the second gives us the indices of mydata at which they occur first.
myvalues = [1,3,5,6,8];
mydata = csvread(myfile);
[valuesfound,ii] = intersect(mydata(:,3),myvalues);
Then we want to add the data in the sixth column and in the rows we just found to the data in the following rows (still sixth column). If one of the rows we found is the last row, we don't have a next row to use. It is up to you what you should do in such a case, but here I append a row of zeros before doing the addition.
mydata(end+1,6) = 0; % in case ii includes last row
output = mydata(ii,6)+mydata(ii+1,6);
0 comentarios
Ver también
Categorías
Más información sobre Biological and Health Sciences en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!