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

tun
prank(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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top