Grouping users into 3 groups using for loop and if statements
4 views (last 30 days)
Show older comments
Hello, I am trying to group 75 different users into 3 groups by usage of electricity : Consumers, Prosumers and Producers. [ Prosumer = Consumption + Production].
The code I am writing is as follows:
load syncedData.mat %loading data - 3 tables (EdSynced, EgSynced and PSynced)
sum(EdSynced{:,2}) % this is how I get the demand (consumption) data
sum(EgSynced{:,2}) % this is how I get the generation data
% for pure consumers the EgSynced variable is full of zeros, so the sum is
% zero. And the same applies for pure producers vice versa.
class_code = zeros(75,3) % creating a matrix for further classification - 75 users and 3 groups
for i= 2:76 % in EdSynced and EgSynced these users are variables from 2 to 76 (75 various users)
for k=1:75 %
consume = sum(EdSynced{:,i});
generates = sum(EgSynced{:,i});
if consume > 0 && generates >0
class_code(k,1) = 1;
elseif consume ==0 && generates >0
class_code(k,2) = 1;
else
class_code(k,3) = 1;
end
end
end
After that I convert the matrix into table:
classes = ["Prosumer","Producer","Consumer"];
class_code = array2table(class_code,'VariableNames',classes)
But, unfortunately my code doesn't work properly. Could you please suggest a fix for it?
It outputs (the first segment of code) the matrix full of ones.
Thank you very much in advance!
1 Comment
Accepted Answer
Voss
on 13 Jun 2022
It seems like you should not be using two loops. That'll do the counting for every combination of i and k. Instead it seems like you want to do one loop (over i or k) where k=i-1.
class_code = zeros(75,3) % creating a matrix for further classification - 75 users and 3 groups
for ii = 2:76 % in EdSynced and EgSynced these users are variables from 2 to 76 (75 various users)
consume = sum(EdSynced{:,ii});
generates = sum(EgSynced{:,ii});
if consume > 0 && generates > 0
class_code(ii-1,1) = 1;
elseif consume == 0 && generates > 0
class_code(ii-1,2) = 1;
else
class_code(ii-1,3) = 1;
end
end
Of course, if that's how it should be, it can be done with zero loops.
2 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!