我有以下数据集
structure(list(var1 = c(1, 0, 0, 0, 1, 0, 1, 1, 1, 1), var2 = c(0,
1, 0, 1, 1, 1, 1, 1, 1, 1), var = c(1, 1, 1, 0, 1, 0, 1, 1, 1,
1), var3 = c(1, 0, 1, 0, 1, 1, 1, 1, 1, 1), var5 = c(0, 1, 0,
1, 1, 0, 0, 0, 0, 0), ref = c(1, 1, 1, 1, 0, 0, 0, 1, 1, 1)), row.names = c(NA,
-10L), class = c("tbl_df", "tbl", "data.frame"))
我想在以“ var”开头的每个变量和ref var之间迭代confusionMatrix函数。形成每个函数应用程序(每个var),我想将结果保存到新的数据框中,如下所示:
Variable Sensitivity
var1 1
var2 0.87
...
我已经编写了以下代码:
library(Metrics)
k = grep("^var",colnames(data))
results<-as.data.frame(results <- lapply(k, FUN=function(x) {
cm = confusionMatrix(data=as.factor(data$ref), reference=as.factor(data[[x]]))
data.frame(
variable=names(data)[x],
Sensitivity = unname(cm$byClass[1])
) }))
我没有收到错误,但是结果不是我想要的,因为我得到了这样的data.frame
Variable Sensitivity Variable1 Sensitivity1 Variable2 Sensitivity2
var1 1 var2 0.76 var3 0.54
我在哪里错了?
谢谢
使用这种稍微改变的方法:
k = grep("^var",colnames(data))
results<-data.frame(results <- sapply(k, FUN=function(x) { # change to sapply
cm = confusionMatrix(data=as.factor(data$ref), reference=as.factor(data[[x]]))
data.frame(
variable=names(data)[x],
Sensitivity = unname(cm$byClass[1]),
stringsAsFactors = F)})) # add this to keep column names as a character variable
results = data.frame(t(results)) # transpose results
并且您的results
数据框将看起来像
# variable Sensitivity
# X1 var1 0.25
# X2 var2 0
# X3 var 0.5
# X4 var3 0
# X5 var5 0.2857143