Ich habe folgende Datenstruktur:R: wie Median und Vereinbarung Funktion für mehrere Gruppen erstellen
Player Team Round Question Answer
1: 2 1 1 1 1
2: 5 1 1 1 1
3: 8 1 1 1 1
4: 9 1 1 1 1
5: 10 1 1 1 1
6: 2 1 1 2 4
7: 5 1 1 2 5
8: 8 1 1 2 5
9: 9 1 1 2 5
10: 10 1 1 2 5
11: 2 1 1 4 4
12: 5 1 1 4 3
13: 8 1 1 4 4
14: 9 1 1 4 2
15: 10 1 1 4 4
16: ...
So gibt es mehrere Spieler aus verschiedenen Teams, einige Fragen zu beantworten. Es gibt immer 2 Spielrunden.
Was ich versuche zu berechnen, ist das Medium und der Übereinstimmungskoeffizient (siehe agrmt package) aus den Daten durch Gruppierung des Teams und der Frage.
wie das Ergebnis aussehen soll:
Team Question Median_R1 Agrmt_R1 Median_R2 Agrmt_R2
1: 1 1 1 1 1 1
2: 1 2 2 0.83 1 1
3: ...
4: 5 10 4 1 4 1
Kennt jemand, ob dies möglich ist? Ich konnte dafür keine Lösung finden. Ich kann den Median und den Übereinstimmungskoeffizienten eigenständig lösen, aber nicht kombiniert?
Jeder Hinweis ist willkommen. Vielen Dank.
UPDATE:
Die Vereinbarung Funktion Die Werte stellen einen Koeffizienten zwischen -1 und 1 zurück.
- 1 steht für eine vollständige Übereinstimmung (z. B. wenn jeder Spieler 5 antwortet).
- 0 wäre, wenn jeder Spieler eine andere Antwort hat.
- -1 wäre, wenn eine Meinungsverschiedenheit besteht (einige Spieler sagen Antwort 1 und andere 5 sagen)
die Median Vergleich einen Vektor des Frequenzvektor nehmen die Vereinbarung Funktionen.
Zum Beispiel haben wir die folgenden Antworten
Player Team Round Question Answer
6: 2 1 1 2 4
7: 5 1 1 2 5
8: 8 1 1 2 5
9: 9 1 1 2 5
10: 10 1 1 2 5
Die Funktionseingänge würde wie folgt aussehen:
Median-Eingang: 4,5,5,5,5
-> Ergebnis: 5
Vereinbarung Eingang: 0,0,0,1,4
-> Ergebnis:
UPDATE 2: behobenes
die Berechnung der Vereinbarung könnte mit dem folgenden Code gemacht werden:
agreement(table(factor(x, levels=1:5)))
Das Finale basiert auf @sandipan Implementierung. Ich musste einen weiteren Sortierschritt hinzufügen, um die richtigen Daten zu kombinieren.Frames:
library(agrmt)
df1 <- unique(df[c('Party', 'Question')])
for (df.R in split(df, df$Round)) {
round <- unique(df.R$Round)
# get the data.frame of the current Round.
df2 <- as.data.frame(as.list(aggregate(Answer ~ Party + Question + Round,
df.R, FUN = function(x) c(Median = median(x), Agrmt = agreement(table(factor(x, levels=1:5)))))))
# sort it and take only the columns of median and agreement
df3 <- df2[with(df2, order(Party, Question)),][4:5]
names(df3) <- c(paste('Median_R', round, sep=''), paste('Agrmt_R', round, sep=''))
df1 <- cbind.data.frame(df1, df3)
}
df1
Vielen Dank für die Hilfe.
Anstatt uns zu bitten, das agrmt-Paket Vignette durchzulesen, teilen Sie uns einfach mit, welche Funktion Sie für die Berechnung der Vereinbarung verwenden möchten. – eipi10