我有两个长度相等的因子数据向量。只是为了举例:
observed=c("a", "b", "c", "a", "b", "c", "a")
predicted=c("a", "a", "b", "b", "b", "c", "c")
最终,我试图生成一个分类矩阵,该矩阵显示正确预测每个因子的次数。该示例如下所示:
name T F
a 1 2
b 1 1
c 1 1
请注意,tables()命令在这里不起作用,因为我有11个不同的因素,并且输出将是11x11而不是11x2。我的计划是创建三个向量,并将它们组合成一个数据帧。
首先,是现有向量中唯一因子值的向量。这很简单,
names=unique(df$observed)
接下来,是一个向量的值,显示正确预测的数量。这就是我遇到麻烦的地方。我可以获得像这样的单个因素的正确预测数:
correct.a=sum(predicted[which(observed == "a")] == "a")
但这很麻烦,要一次又一次地重复,然后合并成一个像这样的向量
correct=c("correct.a", "correct.b", correct.c")
有没有一种方法可以使用循环(或其他您可以想到的策略)来改善这一过程?
还要注意,我要创建的最终向量将是这样的:
incorrect.a=sum(observed == "a")-correct.a
答案 0 :(得分:2)
t(sapply(split(predicted == observed, observed), table))
# FALSE TRUE
#a 2 1
#b 1 1
#c 1 1
答案 1 :(得分:0)
我建议您使用data.table
作为明确的清晰方法来定义结果:
library(data.table)
observed=c("a", "b", "c", "a", "b", "c", "a")
predicted=c("a", "a", "b", "b", "b", "c", "c")
dt <- data.table(observed, predicted)
res <- dt[, .(
T = sum(observed == predicted),
F = sum(observed != predicted)),
observed
]
res
# observed T F
# 1: a 1 2
# 2: b 1 1
# 3: c 1 1