Ich habe einen etwas chaotischen Datenrahmen, in dem Fächer eingestuft werden, aber einige sind für Rankings gebunden.ersetzen Teilmenge von Vektorwerten mit Subset-Durchschnitt
Wo Individuen gebunden sind, muss ich ihre Ränge als Durchschnittswerte der gebundenen Positionen ausdrücken. So etwas wie
n.rank n.subj
1 1.0 A
2 2.0 B
3 4.0 C
4 4.0 D
5 4.0 E
6 6.0 F
7 7.5 G
8 7.5 H
9 9.0 I
Ich habe versucht mit strngsplit()
und Elementen der Liste durch die Reihen zu benennen, aber ich am Ende mit einem Datenrahmen auf, die ebenso schwierig scheint, zu beschäftigen. verwenden gregexpr()
und regmatches()
zu versuchen Reihen zu identifizieren, die gemittelt werden müssen
a<-strsplit(as.character(df$subj),",")
names(a)<-df$rank
b<-melt(a)
colnames(b)<-c("n.subj","n.rank")
b[1:10,]
n.subj n.rank
1 A 1
2 B 2
3 C 3
4 D 3
5 E 3
6 C 4
7 D 4
8 E 4
9 C 5
10 D 5
erreiche ich auch eine Sackgasse, wenn ich.
m<-gregexpr(",+",df$subj)
df$no.avg<-melt(lapply(regmatches(df$subj, m),length))[,1]+1
df
rank subj no.avg
1 1 A 1
2 2 B 1
3 3 C,D,E 3
4 4 C,D,E 3
5 5 C,D,E 3
6 6 F 1
7 7 G,H 2
8 8 G,H 2
9 9 I 1
Irgendwelche kreativen Lösungen da draußen? Danke vielmals.
Am Ende habe ich nicht dieses Skript verwenden weil ich nicht in der "sauberen" Umgebung lebe, aber deine Logik, den Rang nach Themen zu mitteln, machte zuerst die Lösung klar. Danke vielmals. – gavago
@gavago Gern geschehen. Ich habe den anderen Ansatz hinzugefügt, der nicht "didyverse" oder "dplyr" erfordert. – kitman0804