Ich habe eine große db von Kursen mit der Note und Studenten ID. Es sieht aus wie das ist etwas (mit viel mehr Variablen, die zur Vereinfachung entfernt wurden):Tabellierung von Schulnoten mit data.table (lange Form zu breiter Form)
studentID course grade
--------------------------------
1 chemistry 86
2 chemistry 85
2 math 72
3 english 52
3 math 90
...
ich diese große Datei in eine Datei umwandeln müssen, wo jeder Schüler ihre Reihe mit den Noten für die verschiedenen Kurse hat. Etwas mehr wie folgt aus:
studentID chemistry math english
----------------------------------------
1 86 NA NA
2 85 72 NA
3 NA 90 52
Hier ist der Code meine Sampler db zu erstellen:
course.db <- data.table(
studentID=c("1", "2", "2", "3", "3"),
course=c("chemistry", "chemistry", "math", "english", "math"),
grade=c(86, 85, 72, 52, 90)
)
Was ich in der Regel tun, ist ich eine Studentenakte db mit den üblichen Informationen erstellen (GPA, Schule, usw.) wie folgt aus:
student.files <- course.db[, .(
average=mean(grade, na.rm=T) #more vars are created here
), by="studentID"]
Dann eine andere Tabelle mit der Note ich schaffe ich brauche:
math.grades <- course.db[course=="math", .(
math=grade
), by="studentID"]
Dann fusioniere ich das Ganze. Das funktioniert, wenn es nur wenige Kurse gibt. Aber ich muss Noten von mindestens einem Dutzend Kurse zusammenstellen. Also meine Frage ist: Wie kann ich die Note abhängig vom Wert der "Grad" -Spalte bedingt? Wonach ich suche:
#careful: not working code
student.files <- course.db[, .(
average = mean(grade, na.rm=T) #more vars are created here,
math = ThenAMiracleOccurs("math", grade),
english = ThenAMiracleOccurs("english", grade),
chemistry = ThenAMiracleOccurs("chemistry", grade),
), by="studentID"]
Blick auf 'dcast' – HubertL