我有一个标签名为df,包含了几个分类器的结果:准确性,Npv,Ppv等。
我想在称为“点”的数据框架中增加一个新列,其中包含这种加权计算:
Points = Accuracy* 0,20 + Specificity *0,10 + Sensitivity *0.35 + Neg Pre Value*0.10 + Pos Pred value*0.25)我试着用这种方式来使用:
df$Points <- apply(df[,3:7],1,make.calc)该函数将使其计算从第3列到第7列,并将结果存储在一个名为Point的新列中。
我还以这样的方式定义了我的函数make.calc:
make.calc <- function(x) {
t <- function(x) {
df$Accuracy * 0.2 + df$Specificity * 0.1 + df$Sensitivity * 0.35 + df$Neg_Pred_Value * 0.1 + df$Pos_Pred_Value * 0.25 }
t } 但是我得到的是一个名为Point的新列,它包含一个字符串,模型定义了above...not,这是我需要的计算!
有人能帮我理解我的代码出了什么问题吗??
这是我的df的dput:
> dput(head(df))
structure(list(Model = structure(1:6, .Label = c("Decision Tree",
"Naive Bayes", "Neural Networks", "Random Forest", "SVM Linear",
"SVM Radial"), class = "factor"), `Data source` = c("Without_DownSampling",
"Without_DownSampling", "Without_DownSampling", "Without_DownSampling",
"Without_DownSampling", "Without_DownSampling"), Specificity = c("0.984",
"0.490", "0.980", "0.998", "0.982", "0.980"), `Pos Pred Value` = c("0.937",
"0.321", "0.917", "0.991", "0.924", "0.917"), Accuracy = c("0.980",
"0.588", "0.969", "0.996", "0.966", "0.967"), Sensitivity = c("0.963",
"0.991", "0.926", "0.991", "0.898", "0.917"), `Neg Pred Value` = c("0.991",
"0.995", "0.982", "0.998", "0.975", "0.980")), .Names = c("Model",
"Data source", "Specificity", "Pos Pred Value", "Accuracy", "Sensitivity",
"Neg Pred Value"), row.names = c(NA, 6L), class = "data.frame")发布于 2019-09-14 16:56:30
在您提供的示例中,几乎所有变量都被分类为字符串。不幸的是,您不能对字符串执行任何计算,所以应该首先将它们全部转换为数值变量。
df <- data.frame(purrr::map_at(df, 3:7, as.numeric), stringsAsFactors = FALSE)这是一种方法,但我相信还有其他更好的选择。您还需要修复变量名,以便它们中没有空格。注意,Neg Pre Value不是一个好名字--建议您适应Neg_Pre_Value或类似的东西。
然后,您不需要一个函数来执行您想要的任务。
您可以简单地定义新变量如下:
df$Points <- df$Accuracy * 0.2 + df$Specificity * 0.1 + df$Sensitivity * 0.35 + df$Neg_Pred_Value * 0.1 + df$Pos_Pred_Value * 0.25 https://stackoverflow.com/questions/57936034
复制相似问题