У меня есть два вектора факторных данных с одинаковой длиной. Просто для примера:
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