finding the mean based on a specific value in other column
22 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Najam us Saqib Fraz
el 9 de Oct. de 2020
Comentada: Jon
el 9 de Oct. de 2020
Guys I have following data as an example.The data contain 4 coloumns.want to average 4th coloumn when 1st couloumn is equal to 527.1235 and third coloumn is 927.5
0 comentarios
Respuesta aceptada
Asad (Mehrzad) Khoddam
el 9 de Oct. de 2020
Editada: Asad (Mehrzad) Khoddam
el 9 de Oct. de 2020
You can find the rows with the first condition and the other rows for the second condition. The intersection of the two rows, are the row numbers that satisfy both conditions:
rows = intersect(find(a(:,1)==527.1235), find(a(:,3)==927.5));
% average of the above rows
avg = mean(a(rows,4));
disp(avg)
or simpler :
rows = find(a(:,1)==527.1235 & a(:,3)==927.5);
% average of the above rows
avg = mean(a(rows,4));
disp(avg)
3 comentarios
Asad (Mehrzad) Khoddam
el 9 de Oct. de 2020
When data is missing in the data file, it shows as NaN. You can remove the lines that are NaN
use this option:
avg = mean(a(rows,4),'omitnan');
Más respuestas (2)
madhan ravi
el 9 de Oct. de 2020
Editada: madhan ravi
el 9 de Oct. de 2020
ix = (abs(column_1 - 527.1235) < 1e-4) &...
(abs(column_1 - 927.5) < 1e-1);
M = mean(column_4(ix))
0 comentarios
Jon
el 9 de Oct. de 2020
Editada: Jon
el 9 de Oct. de 2020
Lets say you have put your data into an array X.
Find a logical index where the rows match your criteria using:
criteria = [527.1235 927.5]
idl = ismember(X(:,[1,3]),criteria,'rows')
then do the averaging on the 4th colulmn for the rows where the criteria matches
xMean = mean(X(idl,4))
5 comentarios
Asad (Mehrzad) Khoddam
el 9 de Oct. de 2020
When data is missing in the data file, it shows as NaN. You can remove the lines that are NaN
Jon
el 9 de Oct. de 2020
I think you are trying to show that floating point comparisons could be a problem if they are not exact. I assumed they were exact, in any case given your example I get idl = 1 not 0
>> X = [527.1235 1.0000 927.5000],criteria =[527.1235 927.5000]
X =
527.1235 1.0000 927.5000
criteria =
527.1235 927.5000
>> idl = ismember(X(:,[1,3]),criteria,'rows')
idl =
logical
1
Ver también
Categorías
Más información sobre Matrix Indexing 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!