我有一个数据框,我想用一个因子计算多数投票,例如
graph_tasks = { 1: [2, 11], 2: [3], 3: [], 11: [12], 12: [13], 13: [] }
输出应为
item category
1 2
1 3
1 2
1 2
2 2
2 3
2 1
2 1
您可能会识别来自here的示例数据,但我不想要模式,我想获得实际的多数投票(意味着超过1/2的人选择了该选项)。因此,“第2项”应该没有多数。
item majority_vote
1 2
2 NA
似乎没有帮助我,因为table()
只会给我模态值。我需要知道3件事,我拥有的票数,该选项的名称,以及某人投票选项的次数。我可以得到前两个
which.max()
和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)))))
或者...有一些我想念的简单方法吗? 谢谢!
答案 0 :(得分:1)
以下是dplyr
选项:
library(dplyr)
df %>%
group_by(item, category) %>%
mutate(votes = n()) %>%
group_by(item) %>%
summarise(majority_vote = category[votes > n()/2][1])
# A tibble: 2 x 2
# item majority_vote
# <int> <int>
#1 1 2
#2 2 NA