문제
한 사람이 4 명의 심사 위원이 있고 각각 특정 연기자 또는 특정 주제에 대해 점수를 주면 각각 점수가 포함 된 4 개의 벡터를 가질 수 있습니다. 그러나 하나는 다른 판사에 비해 한 판사에 의해 등급 인플레이션을 극복하기 위해 그것을 순위로 바꾸고 싶습니다. 쉽습니다
transform(assignment,judge1.rank=rank(judge1),judge2.rank=rank(judge2),
judge3.rank=rank(judge3), judge4.rank=rank(judge4))
그러나 각 행 (Performer 또는 Topic)에 대해 각 행에 대해 각 판에 대한 순위 (또는 병렬 순위)를 표시하는 4 개의 열을 원합니다.
나는 다음과 같은 일을하고 싶습니다
prank(judge1.rank,judge2.rank,judge3.rank,judge4.rank)
데이터 프레임으로 출력해야 할 것 같아요.
나는 재구성 패키지를 사용하여 데이터를 녹이는 것을 생각했지만 그것은 예비 사고 일뿐입니다.
해결책
내가 당신을 올바르게 이해한다면, 이것은 당신이 원하는 것을 할 것입니다.
## example data
set.seed(1)
judge <- data.frame(judge1 = sample(1:10), judge2 = sample(1:10),
judge3 = sample(1:10), judge4 = sample(1:10))
우리는 사용하는 각 판사의 순위를 계산합니다 sapply()
순위 행렬을 반환합니다. 그런 다음 우리는 적용을 사용합니다 rank()
이 매트릭스의 행에서 성능/행 순위를 계산합니다. 최종 전환은 필요한 방향으로 결과를 다시 얻습니다.
> 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
함수로 마무리하면 가기에 좋습니다.
prank <- function(df, ...) {
t(apply(sapply(df, rank, ...), 1, rank, ...))
}
주는 것 :
> 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
그만큼 ...
인수를 허용합니다 rank()
예를 들어 전달됩니다 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
제휴하지 않습니다 StackOverflow