필터 지우기
필터 지우기

How to use AND in an if loop to find the first repeated value

조회 수: 2 (최근 30일)
mcl1993
mcl1993 2016년 8월 23일
답변: Robert 2016년 8월 23일
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

채택된 답변

Adam
Adam 2016년 8월 23일
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.

추가 답변 (1개)

Robert
Robert 2016년 8월 23일
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);

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by