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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top