Convert an array of numbers into letters using logical indexing

17 views (last 30 days)
I am working on a school project that involves reading an excel file, calculating grades for each cell, replacing number grades with letter grades, and writing the array back into another excel file. I'm hung up on the replacing number grades with letter grades part. This is what I have so far for that portion:
grades =
6.29
5.87
5.28
7.38
7.4
4.07
4.23
7.25
3.6
4.37
4.74
4.79
7.73
9.15
8.83
5.23
0.66
6.18
7.71
8.16
6.33
5.46
6.63
0.07
grades(grades>=9.0 & grades<=10.0) = 'A';
grades(grades>=8.5 & grades<9.0) = 'AMinus';
grades(grades>=8.0 & grades<8.5)= 'BPlus';
grades(grades>=7.5 & grades<8.0) = 'B';
grades(grades>=7.0 & grades<7.5) = 'BMinus';
grades(grades>=6.5 & grades<7.0) = 'CPlus';
grades(grades>=6.0 & grades<6.5) = 'C';
grades(grades>=5.5 & grades<6.0) = 'CMinus';
grades(grades>=5.0 & grades<5.5) = 'D';
studentAvg(studentAvg>=0 & studentAvg<5.0) = 'F';
So I've indexed the array that I've been given, and my logical indexing code determines which grades in the array are A's,B's,C's, and so on.
The problem I've run into, though, is that after logical indexing, I can't figure out how to write 'A' back into the array to the number grades which have earned A's, 'B' to those that earned B's, and so on.
I need to keep the order of my array as it is linked to a list of Student ID numbers that I don't want to resort/reindex.
Any help is much appreciated!
  2 Comments
madhan ravi
madhan ravi on 15 Mar 2019
Could you illustrate with an example of your desired output?
Weston Way
Weston Way on 15 Mar 2019
This is what I'd like it to look like, with a few more values where the '...' is.
gradesSolved =
91180 C
91737 D
92024 C+
'...'
99902 F

Sign in to comment.

Answers (2)

per isakson
per isakson on 15 Mar 2019
Edited: per isakson on 15 Mar 2019
Another approach
>> grades = reshape([ 6.29, 5.87, 5.28, 7.38, 7.40, 4.07, 4.23, 7.25, 3.60 ...
, 4.37, 4.74, 4.79, 7.73, 9.15, 8.83, 5.23, 0.66, 6.18 ...
, 7.71, 8.16, 6.33, 5.46, 6.63, 0.07 ], [],1 );
>> out = cssm( grades )
out =
1×24 cell array
Columns 1 through 9
{'C'} {'C-'} {'D'} {'B-'} {'B-'} {'F'} {'F'} {'B-'} {'F'}
Columns 10 through 19
{'F'} {'F'} {'F'} {'B'} {'A'} {'A-'} {'D'} {'F'} {'C'} {'B'}
Columns 20 through 24
{'B+'} {'C'} {'D'} {'C+'} {'F'}
where
function out = cssm( grades )
%%
grade_edges = [ 0.0, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 10.0 ];
letter_grades = {'F', 'D', 'C-','C', 'C+','B-','B', 'B+','A-','A' };
%%
ix = discretize( grades, grade_edges );
out = letter_grades( 1, ix );
end
The five digits numbers, e.g. 91737, are they student IDs and where do they come from?

Andrei Bobrov
Andrei Bobrov on 15 Mar 2019
v = [0, 5:.5:10]';
S = string(cellstr(('F':-1:'A')'));
K = S(4:6)' + {'-','','+'}';
K = [S(1:3);K(1:end-1)'];
out = discretize(grades,v,K);

Community Treasure Hunt

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

Start Hunting!