Ich versuche, zwei Datensätze mit den folgenden Variablen übereinstimmen School (eindeutig) mit Klassen, die Lehrer benötigen. Manche Lehrer haben eine Spezialität, manche haben mehr als eine. Ich habe versucht, die match() und die (% in%) Basisfunktionen zu verwenden, aber ich kann es nicht für alle möglichen Lehrer-Übereinstimmungen suchen. Es bleibt immer nach dem ersten Spiel stehen. Hier einige Beispieldaten:Mehrere übereinstimmende Funktion in r
class<-c("english","history","art","art","math","history","art")
school<-c("C.H.S.","B.H.S.","D.H.S.","A.H.S.","Z.H.S.","M.H.S.","L.H.S.")
specialty<-c("math","history","English","history","literature","art","English")
teacher<-c("Jill","Jill","Sam","Liz","Liz","Liz","Rob")
teacher.skills<-data.frame(teacher, specialty)
school.needs<-data.frame(school,class)
teacher.match<-data.frame(Jill,Sam,Rob,Liz)
Das Endergebnis würde wie folgt aussehen:
Jill<-c("No","Yes","No","No","Yes","Yes","No")
Sam<-c("Yes","No","No","No","No","No","No")
Liz<-c("No","Yes","Yes","Yes","No","Yes","Yes")
Rob<-c("Yes","No","No","No","No","No","No")
match.result<-data.frame(school.needs, teacher.match)
match.result
Ich habe sogar auf eine kleine Funktion wie diese versucht, arbeiten aber immer noch nicht die endgültige Formatierung richtig machen kann.
source.1<-school.needs
source.2<-teacher.skills
dist.name<-adist(source.1$class, source.2$specialty, partial = FALSE, ignore.case = TRUE)
min.name<-apply(dist.name, 1, min)
school.teacher.match<-NULL
for(i in 1:nrow(dist.name))
{
skills.ref<-match(min.name[i], dist.name[i,])
school.ref<-i
school.teacher.match<-rbind(data.frame(skills.ref=skills.ref, school.ref=school.ref, Teacher=source.2[skills.ref,]$teacher, Class=source.1[school.ref,]$class, School=source.1[school.ref,]$school, adist=min.name[i]), school.teacher.match)
school.teacher.match<-subset(school.teacher.match, school.teacher.match$adist==0)
}
school.teacher.match
Jede Hilfe wäre sehr geschätzt, danke!
das ist genial, danke für die Tipps und Lösung hier! –
Fühlen Sie sich frei zu upvote/in diesem Fall dann akzeptieren :) – arvi1000
Ich tat, aber ich bin zu neu für die Registrierung auf der Seite –