我有一个数据帧,df如下所示。 每列的数据类型:order_id:int,actual:chr,predict:chr。
[![DF] [1] [1]
我需要将此数据帧df传递给名为applyF1score的函数,以获得平均f1分数。例如,如果我将一个名为test的输入传递给如下定义的函数applyF1score,我会获得正确的f1分数。但是如果我将df传递给函数,我就无法获得正确的f1分数。我只是找不到将实际列和预测列中的所有值转换为所有整数的方法,以便可以正确应用applyF1score函数。请帮忙。
test <- data.frame(order_id = c(1,2,3),
fact = c("100 200", "NA", "300 400"),
predicted = c("100 300", "100", "300 400"))
F1Score <- function (fact, pred) {
"%ni%" <- Negate("%in%")
fact <- strsplit(fact, " ")
fact <- fact[nzchar(fact)][[1]]
pred <- strsplit(pred, " ")
pred <- pred[nzchar(pred)][[1]]
TP = sum(pred %in% fact)
if(TP == 0) {
return(0)
}
precision <- TP/length(pred)
recall <- TP/length(fact)
2 * precision * recall / (precision + recall)
}
applyF1Score <- function (df) {
apply(df, 1, function (x) F1Score(x["fact"], x["predicted"]))
}
test$f1 <- applyF1Score(test)
test
mean(test$f1)
输出: 将是一个f1得分的数据框