У меня есть следующие структуры данных:R: как создать медиану и функцию соглашения для нескольких групп
Player Team Round Question Answer
1: 2 1 1 1 1
2: 5 1 1 1 1
3: 8 1 1 1 1
4: 9 1 1 1 1
5: 10 1 1 1 1
6: 2 1 1 2 4
7: 5 1 1 2 5
8: 8 1 1 2 5
9: 9 1 1 2 5
10: 10 1 1 2 5
11: 2 1 1 4 4
12: 5 1 1 4 3
13: 8 1 1 4 4
14: 9 1 1 4 2
15: 10 1 1 4 4
16: ...
Так есть несколько игроков из несколько команды, отвечая на несколько вопросов. Всегда есть 2 раунда игр.
То, что я пытаюсь вычислить, - это средний и коэффициент согласия (см. agrmt package) по данным , объединив команду и вопрос.
Результат должен выглядеть следующим образом:
Team Question Median_R1 Agrmt_R1 Median_R2 Agrmt_R2
1: 1 1 1 1 1 1
2: 1 2 2 0.83 1 1
3: ...
4: 5 10 4 1 4 1
знает кто, если это возможно? Я не мог найти решение для этого. Я могу решить медианный и согласующий коэффициент отдельно, но не комбинированный?
Каждый намек приветствуется. Большое спасибо.
ОБНОВЛЕНИЕ:
Функция соглашение возвращает коэффициент между -1 и 1. Значения представляют.
- 1 представляет полное соглашение (например, если каждый игрок отвечает 5).
- 0 будет, если у каждого игрока есть другой ответ.
- -1 было бы, если разногласие существует (некоторые игроки говорят, ответ 1 и другие говорят, 5)
По сравнению с медианой, функции соглашения переводит вектор вектора частоты.
Например, мы имеем следующие ответы
Player Team Round Question Answer
6: 2 1 1 2 4
7: 5 1 1 2 5
8: 8 1 1 2 5
9: 9 1 1 2 5
10: 10 1 1 2 5
Функциональные входы будут выглядеть следующим образом:
Медиана ввода: 4,5,5,5,5
-> Результат: 5
вход Соглашение: 0,0,0,1,4
-> Результат: 0,9
ОБНОВЛЕНИЕ 2: решаемые
Расчет соглашение может быть сделано с помощью следующего кода:
agreement(table(factor(x, levels=1:5)))
Окончательный вариант основан на реализации @sandipan. Я должен добавить еще один шаг сортировки, чтобы объединить правильные data.frames:
library(agrmt)
df1 <- unique(df[c('Party', 'Question')])
for (df.R in split(df, df$Round)) {
round <- unique(df.R$Round)
# get the data.frame of the current Round.
df2 <- as.data.frame(as.list(aggregate(Answer ~ Party + Question + Round,
df.R, FUN = function(x) c(Median = median(x), Agrmt = agreement(table(factor(x, levels=1:5)))))))
# sort it and take only the columns of median and agreement
df3 <- df2[with(df2, order(Party, Question)),][4:5]
names(df3) <- c(paste('Median_R', round, sep=''), paste('Agrmt_R', round, sep=''))
df1 <- cbind.data.frame(df1, df3)
}
df1
Спасибо всем за помощь.
Вместо того, чтобы просить нас прочитать виньетку 'agrmt', просто сообщите нам, какую функцию вы хотите использовать для расчета соглашения. – eipi10