Как преобразовать данные и сделать все возможное двоичное сравнение между данными? - PullRequest
0 голосов
/ 30 октября 2019

У меня возникли трудности с преобразованием некоторых данных для будущего анализа.

Что у меня есть:

Мои строки - это отдельные участники, которые дают свои представления об относительном ранге других. Эти значения ранжирования представляют собой данные (диапазон 0 - 1), и каждый столбец представляет собой отдельного человека (цель), который получил заданный рейтинг всеми участниками в строках. То есть, есть 28 столбцов, представляющих 28 человек (цели), которые получили рейтинги от участников (оценщиков).

Что я хотел бы:

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

Я думаю, мне нужны две новые переменные, которые отслеживают сравниваемые идентификаторы целей (например, person_1 и person_2) и каким-то образом их значение, а затем проводят сравнение и выводят идентификатор цели с более высоким рейтингом. в отдельной переменной.

1 Ответ

0 голосов
/ 30 октября 2019

Поскольку выборочных данных нет, я сделал следующее:

set.seed(123)
raters <- paste0('rater', 1:28)
targets <- paste0('target', 1:28)
dat <- matrix(runif(28 * 28), ncol = 28, dimnames = list(raters, targets))

Вы можете создать 2-комбинации целей с помощью функции combn:

combos <- combn(targets, 2, simplify=FALSE)

Теперь выможет создать список матриц, каждый с 2 ​​столбцами, выбранными из комбинаций:

dyads <- lapply(combos, function(x) dat[,x])

Имена столбцов каждой матрицы в диадах - это интересующая вас комбинация target_x, target_y, так что для возврата именицель с более высоким рейтингом, вы можете сделать это:

upper_rating <- lapply (dyads, function (y) colnames (y) [apply (y, 1, function (x) which.max (x))]) </p>

Чтобы получить список более высоких рейтингов вместе со сравниваемыми целями, вы объединяете сравниваемые цели в одну строку, а затем связываете это с более высокими рейтингами, созданными выше:

cc <- lapply(combos, paste, collapse='_')
final<- lapply(1:NROW(higher_rating), 
               function(i) {
                  x <- cbind(higher_rating[[i]], cc[[i]]); 
                  rownames(x) <- raters; 
                  x
               })

head(final, 1)
[[1]]
        [,1]      [,2]             
rater1  "target2" "target1_target2"
rater2  "target1" "target1_target2"
rater3  "target2" "target1_target2"
rater4  "target2" "target1_target2" ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...