如何将dataframe中的所有值,df更改为ALL整数,以便将其正确传递给函数applyF1score?

时间:2017-07-03 13:50:11

标签: r

我有一个数据帧,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"]))
}

将测试应用于applyF1Score

test$f1 <- applyF1Score(test)
test
mean(test$f1)

输出:  将是一个f1得分的数据框

0 个答案:

没有答案