模态赢家
您想要的是确定每个观察的模态获胜算法。 R 没有 mode() 函数,它在“模式”的含义中工作,因为它在最常见的结果中 - 而是返回对象的“存储模式”。
这是一个简单的函数,为了更清楚,故意更长。在 cmets 中链接的函数 Mode() 上使用 apply 也可以:
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"
数据结构
请注意,我已将每个观察结果的获胜算法结果以“宽”格式制成变量,因为 data.frame 应该在列中记录变量,而不是在行中。另一种方法是创建一个只有两列的 data.frame,其中一列是观察数,第二列是获胜算法,但这需要与上述解决方案不同的处理方式。
复数与多数和关系
请注意,这不是多数结果,而是多数结果。如果你有 A、B、C、C、D、E,那么 C 是多数结果,但不是多数结果(因为它只出现 1/3 的时间,而多数意味着 > 1/2)。您的问题表明您希望为每次观察宣布某种赢家。这也意味着它根据标签值相当随意地决定关系。例如:
results2 <- data.frame(model1 = c("A", "A", "A", "B", "B", "B"),
model2 = c("A", "B", "C", "C", "D", "E"))
apply(results2, 2, chooseBestModel)
## model1 model2
## "A" "C"