Noten-Intervalle nachvollziehbar bestimmen

R
Statistik
Noten
Author

Johannes Titz

Published

February 3, 2022

Einführung

Zu diesem Artikel gibt es auch ein Video auf Youtube:

Bei Prüfungen an Universitäten werden die wunderbar absolut-skalierten Punkte in ordinale Skalen umgewandelt (üblicherweise die Noten 1.0, 1.3, 1.7, 2.0, 2.3, 2.7, 3.0, 3.3, 3.7, 4.0, 5.0). Das dies meist nicht nach einem festgelegtem Schema passiert, wird den ein oder anderen wundern. In diesem kurzen Beitrag schauen wir uns ein paar Berechnungen an und werden feststellen, dass die Notenbereiche nur in Ausnahmefällen gleich groß sind.

Kurz vorab: Eine Übersicht (ganz unten) bietet eine schnelle Navigation für eine bestimmte maximale Punktzahl. Wenn man nur die Grenzen wissen möchte, reichen diese Tabellen aus. Wer mehr wissen will, liest erst mal hier weiter.

Berechnung

Wir machen eine kleine Analyse mit R, für die wir zunächst ein paar Pakete laden:

Im ersten Schritt teilen wir die 11 Noten auf den Bereich zwischen 50% und 100% ein. Ab 50% gilt eine Prüfung als bestanden.

grade_levels <- levels(cut(50:100, 10, include.lowest = TRUE))
grade_levels <- str_sub(grade_levels, 2, -2)
percent <- as.numeric(unique(unlist(strsplit(grade_levels, ","))))
percent
 [1]  50  55  60  65  70  75  80  85  90  95 100

Hier wäre schon mal der erste Schritt für eine Standardisierung getan. Die Grenzen haben alle gleiche Abstände, allerdings ist der Bereich zwischen 95% und 100% etwas größer, da die 100% mit eingschlossen wird. Bei den anderen Bereichen ist der obere Wert nicht mehr im Intervall. Z. B. geht der erste Bereich von 50 bis 44.999, die 55 ist schon im nächsten Intervall. Tendenziell wird also der Bereich für 1,0 größer ausfallen. Das ist natürlich ungünstig und subjektiv (man kann auch einen beliebigen anderen Bereich vergrößern), aber stellt nicht das größte Problem dar (was wir gleich sehen werden).

Nun brauchen wir eine Funktion, die die maximale Punktzahl, die Prozente und die dazugehörigen Noten zusammenmischt und uns eine Tabelle der Grenzen ausgibt. Hier passiert nichts besonderes, bis auf die Funktion findInterval, die die Punkte den Grenzen zuordnet. Da die Höchstpunktzahl auch eine Note braucht, setzen wir den Parameter rightmost.closed auf TRUE.

create_grade <- function(points, percent, grade) {
  max_points <- max(points)
  interval <- findInterval(points, c(0, max(points) * percent / 100),
                           rightmost.closed = T)
  df <- data.frame(points,
                   grade = grade[interval])
  cut_points <- df %>% 
    group_by(grade) %>%
    summarize(min = min(points), max = max(points)) %>%
    mutate(diff = max - min) # die Länge des Bereichs
  return(cut_points)
}

Nun können wir ein paar typische Fälle erstellen. Die Punkte werden hier über seq mit Schritten von 0.5 erstellt, da es bei den meisten Klausuren auch halbe Punkte gibt.

max_points <- seq(20, 40, 0.5)
grade <- c(5, 4, 3.7, 3.3, 3, 2.7, 2.3, 2, 1.7, 1.3, 1)
points <- lapply(max_points, function(x) seq(0, x, 0.5))

grade_list <- lapply(points, create_grade, percent, grade)
names(grade_list) <- paste0("Max Punkte: ", max_points)

Notenschlüssel Tabellen

Nun können wir die Tabellen erzeugen, hier über kableExtra. Zu beachten ist, dass kbl ohne kable_styling zu inkorrekt formatieren Tabellen führt. Das genutzte Hugo-Theme scheint davon auszugehen, dass die erste Spalte keinen Namen trägt, was aber meist nicht zutrifft. Der kryptische cat-Befehl sorgt für eine schnelle Navigation durch Erstellung eines Akkordions.

res <- Map(function(x, y) 
  kable_styling(kbl(x, col.names = c("Note", "Min", "Max", "Diff"))),
  grade_list,
  names(grade_list)
)
for (i in seq(res)) {
  cat('\n', '<details class="details-example"><summary>↳', names(res[i]), '</summary>')
  print(res[[i]])
  cat('\n</details>')
}
↳ Max Punkte: 20
Note Min Max Diff
1.0 19 20.0 1.0
1.3 18 18.5 0.5
1.7 17 17.5 0.5
2.0 16 16.5 0.5
2.3 15 15.5 0.5
2.7 14 14.5 0.5
3.0 13 13.5 0.5
3.3 12 12.5 0.5
3.7 11 11.5 0.5
4.0 10 10.5 0.5
5.0 0 9.5 9.5
↳ Max Punkte: 20.5
Note Min Max Diff
1.0 19.5 20.5 1.0
1.3 18.5 19.0 0.5
1.7 17.5 18.0 0.5
2.0 16.5 17.0 0.5
2.3 15.5 16.0 0.5
2.7 14.5 15.0 0.5
3.0 13.5 14.0 0.5
3.3 12.5 13.0 0.5
3.7 11.5 12.0 0.5
4.0 10.5 11.0 0.5
5.0 0.0 10.0 10.0
↳ Max Punkte: 21
Note Min Max Diff
1.0 20.0 21.0 1.0
1.3 19.0 19.5 0.5
1.7 18.0 18.5 0.5
2.0 17.0 17.5 0.5
2.3 16.0 16.5 0.5
2.7 15.0 15.5 0.5
3.0 14.0 14.5 0.5
3.3 13.0 13.5 0.5
3.7 12.0 12.5 0.5
4.0 10.5 11.5 1.0
5.0 0.0 10.0 10.0
↳ Max Punkte: 21.5
Note Min Max Diff
1.0 20.5 21.5 1.0
1.3 19.5 20.0 0.5
1.7 18.5 19.0 0.5
2.0 17.5 18.0 0.5
2.3 16.5 17.0 0.5
2.7 15.5 16.0 0.5
3.0 14.0 15.0 1.0
3.3 13.0 13.5 0.5
3.7 12.0 12.5 0.5
4.0 11.0 11.5 0.5
5.0 0.0 10.5 10.5
↳ Max Punkte: 22
Note Min Max Diff
1.0 21.0 22.0 1.0
1.3 20.0 20.5 0.5
1.7 19.0 19.5 0.5
2.0 18.0 18.5 0.5
2.3 16.5 17.5 1.0
2.7 15.5 16.0 0.5
3.0 14.5 15.0 0.5
3.3 13.5 14.0 0.5
3.7 12.5 13.0 0.5
4.0 11.0 12.0 1.0
5.0 0.0 10.5 10.5
↳ Max Punkte: 22.5
Note Min Max Diff
1.0 21.5 22.5 1.0
1.3 20.5 21.0 0.5
1.7 19.5 20.0 0.5
2.0 18.0 19.0 1.0
2.3 17.0 17.5 0.5
2.7 16.0 16.5 0.5
3.0 15.0 15.5 0.5
3.3 13.5 14.5 1.0
3.7 12.5 13.0 0.5
4.0 11.5 12.0 0.5
5.0 0.0 11.0 11.0
↳ Max Punkte: 23
Note Min Max Diff
1.0 22.0 23.0 1.0
1.3 21.0 21.5 0.5
1.7 20.0 20.5 0.5
2.0 18.5 19.5 1.0
2.3 17.5 18.0 0.5
2.7 16.5 17.0 0.5
3.0 15.0 16.0 1.0
3.3 14.0 14.5 0.5
3.7 13.0 13.5 0.5
4.0 11.5 12.5 1.0
5.0 0.0 11.0 11.0
↳ Max Punkte: 23.5
Note Min Max Diff
1.0 22.5 23.5 1.0
1.3 21.5 22.0 0.5
1.7 20.0 21.0 1.0
2.0 19.0 19.5 0.5
2.3 18.0 18.5 0.5
2.7 16.5 17.5 1.0
3.0 15.5 16.0 0.5
3.3 14.5 15.0 0.5
3.7 13.0 14.0 1.0
4.0 12.0 12.5 0.5
5.0 0.0 11.5 11.5
↳ Max Punkte: 24
Note Min Max Diff
1.0 23.0 24.0 1.0
1.3 22.0 22.5 0.5
1.7 20.5 21.5 1.0
2.0 19.5 20.0 0.5
2.3 18.0 19.0 1.0
2.7 17.0 17.5 0.5
3.0 16.0 16.5 0.5
3.3 14.5 15.5 1.0
3.7 13.5 14.0 0.5
4.0 12.0 13.0 1.0
5.0 0.0 11.5 11.5
↳ Max Punkte: 24.5
Note Min Max Diff
1.0 23.5 24.5 1.0
1.3 22.5 23.0 0.5
1.7 21.0 22.0 1.0
2.0 20.0 20.5 0.5
2.3 18.5 19.5 1.0
2.7 17.5 18.0 0.5
3.0 16.0 17.0 1.0
3.3 15.0 15.5 0.5
3.7 13.5 14.5 1.0
4.0 12.5 13.0 0.5
5.0 0.0 12.0 12.0
↳ Max Punkte: 25
Note Min Max Diff
1.0 24.0 25.0 1.0
1.3 22.5 23.5 1.0
1.7 21.5 22.0 0.5
2.0 20.0 21.0 1.0
2.3 19.0 19.5 0.5
2.7 17.5 18.5 1.0
3.0 16.5 17.0 0.5
3.3 15.0 16.0 1.0
3.7 14.0 14.5 0.5
4.0 12.5 13.5 1.0
5.0 0.0 12.0 12.0
↳ Max Punkte: 25.5
Note Min Max Diff
1.0 24.5 25.5 1.0
1.3 23.0 24.0 1.0
1.7 22.0 22.5 0.5
2.0 20.5 21.5 1.0
2.3 19.5 20.0 0.5
2.7 18.0 19.0 1.0
3.0 17.0 17.5 0.5
3.3 15.5 16.5 1.0
3.7 14.5 15.0 0.5
4.0 13.0 14.0 1.0
5.0 0.0 12.5 12.5
↳ Max Punkte: 26
Note Min Max Diff
1.0 25.0 26.0 1.0
1.3 23.5 24.5 1.0
1.7 22.5 23.0 0.5
2.0 21.0 22.0 1.0
2.3 19.5 20.5 1.0
2.7 18.5 19.0 0.5
3.0 17.0 18.0 1.0
3.3 16.0 16.5 0.5
3.7 14.5 15.5 1.0
4.0 13.0 14.0 1.0
5.0 0.0 12.5 12.5
↳ Max Punkte: 26.5
Note Min Max Diff
1.0 25.5 26.5 1.0
1.3 24.0 25.0 1.0
1.7 23.0 23.5 0.5
2.0 21.5 22.5 1.0
2.3 20.0 21.0 1.0
2.7 19.0 19.5 0.5
3.0 17.5 18.5 1.0
3.3 16.0 17.0 1.0
3.7 15.0 15.5 0.5
4.0 13.5 14.5 1.0
5.0 0.0 13.0 13.0
↳ Max Punkte: 27
Note Min Max Diff
1.0 26.0 27.0 1.0
1.3 24.5 25.5 1.0
1.7 23.0 24.0 1.0
2.0 22.0 22.5 0.5
2.3 20.5 21.5 1.0
2.7 19.0 20.0 1.0
3.0 18.0 18.5 0.5
3.3 16.5 17.5 1.0
3.7 15.0 16.0 1.0
4.0 13.5 14.5 1.0
5.0 0.0 13.0 13.0
↳ Max Punkte: 27.5
Note Min Max Diff
1.0 26.5 27.5 1.0
1.3 25.0 26.0 1.0
1.7 23.5 24.5 1.0
2.0 22.0 23.0 1.0
2.3 21.0 21.5 0.5
2.7 19.5 20.5 1.0
3.0 18.0 19.0 1.0
3.3 16.5 17.5 1.0
3.7 15.5 16.0 0.5
4.0 14.0 15.0 1.0
5.0 0.0 13.5 13.5
↳ Max Punkte: 28
Note Min Max Diff
1.0 27.0 28.0 1.0
1.3 25.5 26.5 1.0
1.7 24.0 25.0 1.0
2.0 22.5 23.5 1.0
2.3 21.0 22.0 1.0
2.7 20.0 20.5 0.5
3.0 18.5 19.5 1.0
3.3 17.0 18.0 1.0
3.7 15.5 16.5 1.0
4.0 14.0 15.0 1.0
5.0 0.0 13.5 13.5
↳ Max Punkte: 28.5
Note Min Max Diff
1.0 27.5 28.5 1.0
1.3 26.0 27.0 1.0
1.7 24.5 25.5 1.0
2.0 23.0 24.0 1.0
2.3 21.5 22.5 1.0
2.7 20.0 21.0 1.0
3.0 19.0 19.5 0.5
3.3 17.5 18.5 1.0
3.7 16.0 17.0 1.0
4.0 14.5 15.5 1.0
5.0 0.0 14.0 14.0
↳ Max Punkte: 29
Note Min Max Diff
1.0 28.0 29.0 1
1.3 26.5 27.5 1
1.7 25.0 26.0 1
2.0 23.5 24.5 1
2.3 22.0 23.0 1
2.7 20.5 21.5 1
3.0 19.0 20.0 1
3.3 17.5 18.5 1
3.7 16.0 17.0 1
4.0 14.5 15.5 1
5.0 0.0 14.0 14
↳ Max Punkte: 29.5
Note Min Max Diff
1.0 28.5 29.5 1.0
1.3 27.0 28.0 1.0
1.7 25.5 26.5 1.0
2.0 24.0 25.0 1.0
2.3 22.5 23.5 1.0
2.7 21.0 22.0 1.0
3.0 19.5 20.5 1.0
3.3 18.0 19.0 1.0
3.7 16.5 17.5 1.0
4.0 15.0 16.0 1.0
5.0 0.0 14.5 14.5
↳ Max Punkte: 30
Note Min Max Diff
1.0 28.5 30.0 1.5
1.3 27.0 28.0 1.0
1.7 25.5 26.5 1.0
2.0 24.0 25.0 1.0
2.3 22.5 23.5 1.0
2.7 21.0 22.0 1.0
3.0 19.5 20.5 1.0
3.3 18.0 19.0 1.0
3.7 16.5 17.5 1.0
4.0 15.0 16.0 1.0
5.0 0.0 14.5 14.5
↳ Max Punkte: 30.5
Note Min Max Diff
1.0 29.0 30.5 1.5
1.3 27.5 28.5 1.0
1.7 26.0 27.0 1.0
2.0 24.5 25.5 1.0
2.3 23.0 24.0 1.0
2.7 21.5 22.5 1.0
3.0 20.0 21.0 1.0
3.3 18.5 19.5 1.0
3.7 17.0 18.0 1.0
4.0 15.5 16.5 1.0
5.0 0.0 15.0 15.0
↳ Max Punkte: 31
Note Min Max Diff
1.0 29.5 31.0 1.5
1.3 28.0 29.0 1.0
1.7 26.5 27.5 1.0
2.0 25.0 26.0 1.0
2.3 23.5 24.5 1.0
2.7 22.0 23.0 1.0
3.0 20.5 21.5 1.0
3.3 19.0 20.0 1.0
3.7 17.5 18.5 1.0
4.0 15.5 17.0 1.5
5.0 0.0 15.0 15.0
↳ Max Punkte: 31.5
Note Min Max Diff
1.0 30.0 31.5 1.5
1.3 28.5 29.5 1.0
1.7 27.0 28.0 1.0
2.0 25.5 26.5 1.0
2.3 24.0 25.0 1.0
2.7 22.5 23.5 1.0
3.0 20.5 22.0 1.5
3.3 19.0 20.0 1.0
3.7 17.5 18.5 1.0
4.0 16.0 17.0 1.0
5.0 0.0 15.5 15.5
↳ Max Punkte: 32
Note Min Max Diff
1.0 30.5 32.0 1.5
1.3 29.0 30.0 1.0
1.7 27.5 28.5 1.0
2.0 26.0 27.0 1.0
2.3 24.0 25.5 1.5
2.7 22.5 23.5 1.0
3.0 21.0 22.0 1.0
3.3 19.5 20.5 1.0
3.7 18.0 19.0 1.0
4.0 16.0 17.5 1.5
5.0 0.0 15.5 15.5
↳ Max Punkte: 32.5
Note Min Max Diff
1.0 31.0 32.5 1.5
1.3 29.5 30.5 1.0
1.7 28.0 29.0 1.0
2.0 26.0 27.5 1.5
2.3 24.5 25.5 1.0
2.7 23.0 24.0 1.0
3.0 21.5 22.5 1.0
3.3 19.5 21.0 1.5
3.7 18.0 19.0 1.0
4.0 16.5 17.5 1.0
5.0 0.0 16.0 16.0
↳ Max Punkte: 33
Note Min Max Diff
1.0 31.5 33.0 1.5
1.3 30.0 31.0 1.0
1.7 28.5 29.5 1.0
2.0 26.5 28.0 1.5
2.3 25.0 26.0 1.0
2.7 23.5 24.5 1.0
3.0 21.5 23.0 1.5
3.3 20.0 21.0 1.0
3.7 18.5 19.5 1.0
4.0 16.5 18.0 1.5
5.0 0.0 16.0 16.0
↳ Max Punkte: 33.5
Note Min Max Diff
1.0 32.0 33.5 1.5
1.3 30.5 31.5 1.0
1.7 28.5 30.0 1.5
2.0 27.0 28.0 1.0
2.3 25.5 26.5 1.0
2.7 23.5 25.0 1.5
3.0 22.0 23.0 1.0
3.3 20.5 21.5 1.0
3.7 18.5 20.0 1.5
4.0 17.0 18.0 1.0
5.0 0.0 16.5 16.5
↳ Max Punkte: 34
Note Min Max Diff
1.0 32.5 34.0 1.5
1.3 31.0 32.0 1.0
1.7 29.0 30.5 1.5
2.0 27.5 28.5 1.0
2.3 25.5 27.0 1.5
2.7 24.0 25.0 1.0
3.0 22.5 23.5 1.0
3.3 20.5 22.0 1.5
3.7 19.0 20.0 1.0
4.0 17.0 18.5 1.5
5.0 0.0 16.5 16.5
↳ Max Punkte: 34.5
Note Min Max Diff
1.0 33.0 34.5 1.5
1.3 31.5 32.5 1.0
1.7 29.5 31.0 1.5
2.0 28.0 29.0 1.0
2.3 26.0 27.5 1.5
2.7 24.5 25.5 1.0
3.0 22.5 24.0 1.5
3.3 21.0 22.0 1.0
3.7 19.0 20.5 1.5
4.0 17.5 18.5 1.0
5.0 0.0 17.0 17.0
↳ Max Punkte: 35
Note Min Max Diff
1.0 33.5 35.0 1.5
1.3 31.5 33.0 1.5
1.7 30.0 31.0 1.0
2.0 28.0 29.5 1.5
2.3 26.5 27.5 1.0
2.7 24.5 26.0 1.5
3.0 23.0 24.0 1.0
3.3 21.0 22.5 1.5
3.7 19.5 20.5 1.0
4.0 17.5 19.0 1.5
5.0 0.0 17.0 17.0
↳ Max Punkte: 35.5
Note Min Max Diff
1.0 34.0 35.5 1.5
1.3 32.0 33.5 1.5
1.7 30.5 31.5 1.0
2.0 28.5 30.0 1.5
2.3 27.0 28.0 1.0
2.7 25.0 26.5 1.5
3.0 23.5 24.5 1.0
3.3 21.5 23.0 1.5
3.7 20.0 21.0 1.0
4.0 18.0 19.5 1.5
5.0 0.0 17.5 17.5
↳ Max Punkte: 36
Note Min Max Diff
1.0 34.5 36.0 1.5
1.3 32.5 34.0 1.5
1.7 31.0 32.0 1.0
2.0 29.0 30.5 1.5
2.3 27.0 28.5 1.5
2.7 25.5 26.5 1.0
3.0 23.5 25.0 1.5
3.3 22.0 23.0 1.0
3.7 20.0 21.5 1.5
4.0 18.0 19.5 1.5
5.0 0.0 17.5 17.5
↳ Max Punkte: 36.5
Note Min Max Diff
1.0 35.0 36.5 1.5
1.3 33.0 34.5 1.5
1.7 31.5 32.5 1.0
2.0 29.5 31.0 1.5
2.3 27.5 29.0 1.5
2.7 26.0 27.0 1.0
3.0 24.0 25.5 1.5
3.3 22.0 23.5 1.5
3.7 20.5 21.5 1.0
4.0 18.5 20.0 1.5
5.0 0.0 18.0 18.0
↳ Max Punkte: 37
Note Min Max Diff
1.0 35.5 37.0 1.5
1.3 33.5 35.0 1.5
1.7 31.5 33.0 1.5
2.0 30.0 31.0 1.0
2.3 28.0 29.5 1.5
2.7 26.0 27.5 1.5
3.0 24.5 25.5 1.0
3.3 22.5 24.0 1.5
3.7 20.5 22.0 1.5
4.0 18.5 20.0 1.5
5.0 0.0 18.0 18.0
↳ Max Punkte: 37.5
Note Min Max Diff
1.0 36.0 37.5 1.5
1.3 34.0 35.5 1.5
1.7 32.0 33.5 1.5
2.0 30.0 31.5 1.5
2.3 28.5 29.5 1.0
2.7 26.5 28.0 1.5
3.0 24.5 26.0 1.5
3.3 22.5 24.0 1.5
3.7 21.0 22.0 1.0
4.0 19.0 20.5 1.5
5.0 0.0 18.5 18.5
↳ Max Punkte: 38
Note Min Max Diff
1.0 36.5 38.0 1.5
1.3 34.5 36.0 1.5
1.7 32.5 34.0 1.5
2.0 30.5 32.0 1.5
2.3 28.5 30.0 1.5
2.7 27.0 28.0 1.0
3.0 25.0 26.5 1.5
3.3 23.0 24.5 1.5
3.7 21.0 22.5 1.5
4.0 19.0 20.5 1.5
5.0 0.0 18.5 18.5
↳ Max Punkte: 38.5
Note Min Max Diff
1.0 37.0 38.5 1.5
1.3 35.0 36.5 1.5
1.7 33.0 34.5 1.5
2.0 31.0 32.5 1.5
2.3 29.0 30.5 1.5
2.7 27.0 28.5 1.5
3.0 25.5 26.5 1.0
3.3 23.5 25.0 1.5
3.7 21.5 23.0 1.5
4.0 19.5 21.0 1.5
5.0 0.0 19.0 19.0
↳ Max Punkte: 39
Note Min Max Diff
1.0 37.5 39 1.5
1.3 35.5 37 1.5
1.7 33.5 35 1.5
2.0 31.5 33 1.5
2.3 29.5 31 1.5
2.7 27.5 29 1.5
3.0 25.5 27 1.5
3.3 23.5 25 1.5
3.7 21.5 23 1.5
4.0 19.5 21 1.5
5.0 0.0 19 19.0
↳ Max Punkte: 39.5
Note Min Max Diff
1.0 38 39.5 1.5
1.3 36 37.5 1.5
1.7 34 35.5 1.5
2.0 32 33.5 1.5
2.3 30 31.5 1.5
2.7 28 29.5 1.5
3.0 26 27.5 1.5
3.3 24 25.5 1.5
3.7 22 23.5 1.5
4.0 20 21.5 1.5
5.0 0 19.5 19.5
↳ Max Punkte: 40
Note Min Max Diff
1.0 38 40.0 2.0
1.3 36 37.5 1.5
1.7 34 35.5 1.5
2.0 32 33.5 1.5
2.3 30 31.5 1.5
2.7 28 29.5 1.5
3.0 26 27.5 1.5
3.3 24 25.5 1.5
3.7 22 23.5 1.5
4.0 20 21.5 1.5
5.0 0 19.5 19.5

Die Tabellen können der Standardisierung der Notenberechnung an Universitäten dienen. Allerdings wäre es weit besser einfach Prozent-Werte von den maximal erreichbaren Punkten anzugeben. Dies hat nur Vorteile, aber es gibt hier sicher einige rechtliche und bürokratische Hindernisse. Man könnte aber den Studierenden beides mitteilen, die erreichten Prozente und die Note. Dass die Prozent-Werte aussgekräftiger sind, würden die Studierenden sicher mitbekommen und diese Angabe auch bei anderen Prüfungen fordern. So könnte die kritische Masse für eine Änderung erreicht werden.

Tabellen als csv für Import in OPAL

Nachtrag März 2023: In OPAL kann man jetzt Notenschlüssel als csv importieren. Wir müssen also nur noch die csv-Dateien erstellen:

Map(function(x, y) write.table(x[ , c(1, 3, 2)], file = y, col.names = F,
                               row.names = F, sep = ";"),
    grade_list,
    paste0(substr(names(grade_list), 13, 16), ".csv"))

20.csv    20.5.csv    21.csv    21.5.csv    22.csv    22.5.csv    23.csv    23.5.csv    24.csv    24.5.csv   25.csv    25.5.csv    26.csv    26.5.csv    27.csv    27.5.csv    28.csv    28.5.csv    29.csv    29.5.csv   30.csv    30.5.csv    31.csv    31.5.csv    32.csv    32.5.csv    33.csv    33.5.csv    34.csv    34.5.csv   35.csv    35.5.csv    36.csv    36.5.csv    37.csv    37.5.csv    38.csv    38.5.csv    39.csv    39.5.csv   40.csv