如何从R中的varImp函数排序不同的列

问题描述

我将varImp(model,scale = FALSE)函数用于多类,并且由于三个类,所以得到了20个最重要的变量和三列的结果。 目前,它是根据第一列进行排序的,但是是否可以根据第二列对其进行排序?我尝试将其排序并转换为数据框,但无法正常工作:无法将类““ varImp.train””强制转换为data.frame。

解决方法

我的猜测是您正在使用带有插入符号的randomForest,否则varImp()函数将无法正常工作。

请在您的问题中提供此信息。

因此,您可以存储varImp()结果并进行以下排序:

library(caret)
rf = train(Species ~ .,data=iris,method="rf",trControl=trainControl(method="cv"),importance=TRUE)

varImp(rf,scale=FALSE)
rf variable importance

  variables are sorted by maximum importance across the classes
             setosa versicolor virginica
Petal.Length 22.013    33.4341    27.738
Petal.Width  22.454    32.3445    30.897
Sepal.Length  6.649     8.6931     8.569
Sepal.Width   4.420    -0.8063     3.560

res = varImp(rf,scale=FALSE)$importance

按第二列排序

res[order(res$versicolor,decreasing=TRUE),]

                setosa versicolor virginica
Petal.Length 22.013431  33.434069 27.738319
Petal.Width  22.453571  32.344497 30.897214
Sepal.Length  6.649072   8.693132  8.569421
Sepal.Width   4.419712  -0.806256  3.559570