Question

Si vous avez 4 juges et qu’ils attribuent chacun une note à un interprète ou à un sujet particulier, vous pouvez avoir 4 vecteurs contenant chacun la partition. Mais on voudrait transformer cela en un rang permettant de surmonter l’inflation des grades d’un juge à l’autre. c'est facile

transform(assignment,judge1.rank=rank(judge1),judge2.rank=rank(judge2),
                     judge3.rank=rank(judge3), judge4.rank=rank(judge4))

Mais ensuite, pour chaque ligne (interprète ou sujet), je veux quatre colonnes supplémentaires qui indiquent pour chaque ligne le rang de rang (ou rang parallèle) de chaque juge.

je voudrais faire quelque chose comme

prank(judge1.rank,judge2.rank,judge3.rank,judge4.rank)

Je suppose que cela devrait être généré sous la forme d'une base de données.

Je pensais utiliser le paquetage reshape pour faire fondre les données, mais ce n’est qu’un simple préalable.

Était-ce utile?

La solution

Si je vous comprends bien, cela fera ce que vous voulez:

## example data
set.seed(1)
judge <- data.frame(judge1 = sample(1:10), judge2 = sample(1:10),
                    judge3 = sample(1:10), judge4 = sample(1:10))

Nous calculons les rangs de chaque juge en utilisant sapply () qui renvoie une matrice de rangs. Ensuite, nous appliquons rank () sur les lignes de cette matrice pour calculer les rangs des artistes / interprètes. Une dernière transposition récupère le résultat dans l’orientation requise.

> 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

Emballez cela dans une fonction et vous êtes prêt à partir:

prank <- function(df, ...) {
    t(apply(sapply(df, rank, ...), 1, rank, ...))
}

Ce qui donne:

> 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

Le ... autorise la transmission des arguments à rank () , par exemple l'argument ties.method :

> 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top