pmax (parallel maximal) äquivalent zum Rang in R
-
06-07-2019 - |
Frage
Wenn man 4 beurteilt hat und sie geben jeweils eine Punktzahl für einen bestimmten Darsteller oder ein bestimmtes Thema dann könnte man hat 4 Vektoren mit jeweils der Partitur enthält. Aber man möchte, dass in einen Rang drehen Grad Inflation durch einen Richter im Vergleich zu einem anderen zu überwinden. das ist einfach
transform(assignment,judge1.rank=rank(judge1),judge2.rank=rank(judge2),
judge3.rank=rank(judge3), judge4.rank=rank(judge4))
Aber dann für jede Zeile (Darsteller oder Thema) Ich möchte noch vier Spalten, die für jede Zeile gibt den Rang der Reihen (oder parallel Rang) für jeden Richter.
Ich möchte etwas wie
tunprank(judge1.rank,judge2.rank,judge3.rank,judge4.rank)
Ich denke, es auszugeben als Datenrahmen hat.
Ich dachte, das reshape Paket für die Verwendung der Daten zu schmelzen, aber das ist nur ein vorläufiger Gedanken.
Lösung
Wenn ich Sie richtig verstehe, wird dies tun, was Sie wollen:
## example data
set.seed(1)
judge <- data.frame(judge1 = sample(1:10), judge2 = sample(1:10),
judge3 = sample(1:10), judge4 = sample(1:10))
Wir berechnen die Reihen für jeden Richter mit sapply()
, die eine Matrix aus Reihen zurück. Dann benutzen wir rank()
auf den Zeilen dieser Matrix anwenden, um die Darsteller / row Reihen zu berechnen. Eine abschließende transponieren wird das Ergebnis wieder in der gewünschten Ausrichtung.
> t(apply(sapply(judge, rank), 1, rank))
judge1 judge2 judge3
[1,] 1.5 1.5 3.0
[2,] 3.0 1.5 1.5
[3,] 1.0 2.5 2.5
[4,] 2.0 3.0 1.0
[5,] 1.0 2.0 3.0
[6,] 2.5 1.0 2.5
[7,] 3.0 2.0 1.0
[8,] 3.0 1.0 2.0
[9,] 3.0 1.0 2.0
[10,] 1.0 3.0 2.0
Wickeln Sie, dass in einer Funktion und Sie sind gut zu gehen:
prank <- function(df, ...) {
t(apply(sapply(df, rank, ...), 1, rank, ...))
}
Was gibt:
> prank(judge)
judge1 judge2 judge3
[1,] 1.5 1.5 3.0
[2,] 3.0 1.5 1.5
[3,] 1.0 2.5 2.5
[4,] 2.0 3.0 1.0
[5,] 1.0 2.0 3.0
[6,] 2.5 1.0 2.5
[7,] 3.0 2.0 1.0
[8,] 3.0 1.0 2.0
[9,] 3.0 1.0 2.0
[10,] 1.0 3.0 2.0
Die ...
erlaubt Argumente rank()
in weitergegeben werden, zum Beispiel des ties.method
Argument:
> prank(judge, ties = "min")
judge1 judge2 judge3
[1,] 1 1 3
[2,] 3 1 1
[3,] 1 2 2
[4,] 2 3 1
[5,] 1 2 3
[6,] 2 1 2
[7,] 3 2 1
[8,] 3 1 2
[9,] 3 1 2
[10,] 1 3 2