pmax (máximo paralelo) equivalente para classificação em R
-
06-07-2019 - |
Pergunta
Se alguém tem 4 juízes e cada um deles dar uma pontuação para um artista em particular ou um determinado tema, em seguida, pode-se ter 4 vetores com cada um contendo o placar. Mas a gente gostaria de transformar isso em um posto de superar inflação de notas por um juiz em relação ao outro. que é fácil
transform(assignment,judge1.rank=rank(judge1),judge2.rank=rank(judge2),
judge3.rank=rank(judge3), judge4.rank=rank(judge4))
Mas, em seguida, para cada linha (intérprete ou tópico) Pedir mais quatro colunas que para cada linha afirma o posto de fileiras (ou posição paralela) para cada juiz.
Gostaria de fazer algo como
prank(judge1.rank,judge2.rank,judge3.rank,judge4.rank)
Eu acho que teria de saída como uma trama de dados.
Pensei em usar o pacote remodelar a derreter os dados, mas isso é apenas um pensamento preliminar.
Solução
Se eu entendi corretamente, isso vai fazer o que quiser:
## example data
set.seed(1)
judge <- data.frame(judge1 = sample(1:10), judge2 = sample(1:10),
judge3 = sample(1:10), judge4 = sample(1:10))
Calculamos as fileiras para cada juiz usando sapply()
que retorna uma matriz de fileiras. Então nós usamos aplicar rank()
nas linhas desta matriz para calcular as fileiras performer / linha. A transposição final, fica a parte de trás resultado na orientação necessária.
> 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
dispor que em uma função e você é bom para ir:
prank <- function(df, ...) {
t(apply(sapply(df, rank, ...), 1, rank, ...))
}
O que dá:
> 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
O ...
permite argumentos para rank()
a ser passado, por exemplo o argumento 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