我的问题与使用Caret软件包时的分类数据(R项中的因子)有关的this one有关。我从链接的文章中了解到,如果您使用“公式界面”,则某些功能可能是重要因素,并且培训会正常进行。我的问题是如何使用preProcess()函数缩放数据?如果我尝试在以某些列为因子的数据帧上执行此操作,则会收到以下错误消息:

Error in preProcess.default(etitanic, method = c("center", "scale")) :
  all columns of x must be numeric


参见一些示例代码:

library(earth)
data(etitanic)

a <- preProcess(etitanic, method=c("center", "scale"))
b <- predict(etitanic, a)


谢谢。

最佳答案

与您链接到的帖子确实是同一问题。 preProcess仅适用于数字数据,并且具有:

> str(etitanic)
'data.frame':   1046 obs. of  6 variables:
 $ pclass  : Factor w/ 3 levels "1st","2nd","3rd": 1 1 1 1 1 1 1 1 1 1 ...
 $ survived: int  1 1 0 0 0 1 1 0 1 0 ...
 $ sex     : Factor w/ 2 levels "female","male": 1 2 1 2 1 2 1 2 1 2 ...
 $ age     : num  29 0.917 2 30 25 ...
 $ sibsp   : int  0 1 1 1 1 0 1 0 2 0 ...
 $ parch   : int  0 2 2 2 2 0 0 0 0 0 ...


您不能按原样居中和缩放pclasssex,因此需要将它们转换为虚拟变量。您可以使用model.matrix或插入符号的dummyVars来执行此操作:

 > new <- model.matrix(survived ~ . - 1, data = etitanic)
 > colnames(new)
 [1] "pclass1st" "pclass2nd" "pclass3rd" "sexmale"   "age"
 [6] "sibsp"     "parch"


-1摆脱了拦截。现在,您可以在此对象上运行preProcess

顺便说一句,使preProcess忽略非数字数据在我的“待办事项”列表中,但这可能会导致错误,导致人们不注意。

最高

关于r - 当某些因素成为要素时,如何对其进行预处理?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14023423/

10-12 13:56