我有一个数据框,其中包含7种机器学习算法对每次观察的预测。我想选择最常出现的预测。如何告诉R选择每行中最常出现的因子变量?
例如
A, A, A, B, B
B, B, C, C, C
在第一行中,我希望R选择A,在第二行中我希望R选择C.只有3个级别的因素:A,B和C.如何让R查找多数投票?
答案 0 :(得分:2)
你想要的是确定每个观察的模态获胜算法。 R没有titles.GetMethod("Add").Invoke(titles, chartTitle);
函数,它在“模式”的意义上与最常出现的结果一样 - 而是返回对象的“存储模式”。
这是一个有意长的简单功能,以便更加清晰。在评论中链接的函数mode()
上使用apply
也可以:
Mode()
请注意,我已将每个观察的获胜算法结果变为“宽”格式的变量,因为data.frame应该以列而不是行记录变量。另一种方法是创建一个只有两列的data.frame,其中一列是观察数,第二列是获胜算法,但这需要与上述解决方案不同的处理方式。
请注意,这不是多数结果,而是多个结果。如果您有A,B,C,C,D,E则C是多个结果但不是多数结果(因为它仅发生1/3的时间,并且多数意味着> 1/2)。你的问题建议你想要为每次观察宣布某种胜利者。这也意味着它根据标签值相当任意地决定关系。例如:
results <- data.frame(model1 = c("A", "A", "A", "B", "B"),
model2 = c("B", "B", "C", "C", "C"))
chooseBestModel <- function(x) {
tabulatedOutcomes <- table(x)
sortedOutcomes <- sort(tabulatedOutcomes, decreasing=TRUE)
mostCommonLabel <- names(sortedOutcomes)[1]
mostCommonLabel
}
apply(results, 2, chooseBestModel)
## model1 model2
## "A" "C"