У меня есть dataframe, который я хочу рассчитать большинством голосов на коэффициент, например.Большинство голосов в R
item category
1 2
1 3
1 2
1 2
2 2
2 3
2 1
2 1
Выход должен быть
item majority_vote
1 2
2 NA
Вы можете распознать данные примера из here, но я не хочу, чтобы режим, я хочу, чтобы получить фактическое большинство голосов (что означает более чем 1/2 люди выбрали этот вариант). Следовательно, «пункт 2» не должен иметь большинства.
table()
, похоже, не помогает мне, потому что which.max()
предоставит мне только модное значение. Мне нужно знать 3 вещи, количество голосов, которые у меня есть, имя этого параметра и количество голосов, проголосовавших за выбор. Я могу получить первые два с tapply(all_results_filtered$q1, all_results_filtered$X_row_id ,function(x) length(x))
и tapply(all_results_filtered$q1, all_results_filtered$X_row_id ,function(x) as.numeric(names(which.max(table(x)))))
, но как я могу получить количество голосов за which.max(table(x))
Или ... есть некоторые простой способ, что я не хватает? Спасибо!
'совокупности (категория ~ элемент, DF, функция (х) {у <- х [prop.table (таблица (х))> 0,5]; IfElse (any (is.null (y)), NA, уникальный (y))}) ', но может быть более простой вариант – alistaire
Ah! Кража индексации Psidom снизу, достаточно хорошая базовая версия: 'aggregate (category ~ item, df, function (x) {x [prop.table (table (x))> 0.5] [1]})' – alistaire