pmax (параллельный максимум) эквивалент для ранга в R - PullRequest
2 голосов
/ 11 сентября 2009

Если у каждого есть 4 судьи, и каждый из них выставляет оценку конкретному исполнителю или определенной теме, то можно получить 4 вектора, каждый из которых содержит оценку. Но хотелось бы превратить это в ранг, чтобы преодолеть инфляцию классов одним судьей по сравнению с другим. это просто

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

Но тогда для каждой строки (исполнителя или темы) я хочу еще четыре столбца, в которых для каждой строки указывается ранг рангов (или параллельный ранг) для каждого судьи.

Я хотел бы сделать что-то типа

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

Полагаю, он должен был бы выводиться как фрейм данных.

Я думал об использовании пакета изменения формы, чтобы растопить данные, но это только предварительная мысль.

1 Ответ

1 голос
/ 02 апреля 2011

Если я вас правильно понимаю, это будет делать то, что вы хотите:

## 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(), который возвращает матрицу рангов. Затем мы используем apply 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...