如何在使用 gsub 对其进行子集化后减少数据集

How to reduce a data set after subsetting it with gsub

我有一个大数据集,我减少了多次应用gsub,基本上是这种形式:

levels(Orders$Im) <- gsub("Osp", "OsProf", levels(Orders$Im))

我也用过rbind:

DI_Reduced <- rbind(CX, OsP)

我需要将函数 "tree" 应用于生成的 data.frame,但出现错误:

tree.model <- tree(line ~ CountryCode + OrderType + Support, data=train.set)

错误是:

Error in tree(line ~ CountryCode + OrderType + Support,  : 
  factor predictors must have at most 32 levels

奇怪的事情:如果我用 write.csv 导出 train.set 然后用 read.csv 重新导入它,错误消失并且树被构建。 我调查了 train.set 的结构,这是 exporting/importing 前后的区别:

$ CustomerNumber: Factor w/ 4616 levels "0","101959","210285",..: 3070 3069 4539 3732 2573 3086 2973 3817 4056 2956 ...
 $ CountryCode        : Factor w/ 4 levels "OtherCountry",..: 3 3 4 4 3 3 3 4 4 3 ...
 $ OrderType          : Factor w/ 5 levels "Order","NewOrder",..: 5 5 5 5 5 5 5 5 5 5 ...
 $ Support   : Factor w/ 5 levels "#N/A","BN",..: 4 4 4 4 2 4 4 4 4 4 ...
 $ Manuf      : Factor w/ 163 levels "<Generic>","6gi",..: 52 52 52 52 52 52 52 52 52 52 ...
 $ line       : Factor w/ 623 levels "\"Generic\" Skews",..: 400 35 400 400 400 400 400 400 400 400 ...
 ________________________________________________________________
 
  $ CustomerNumber: Factor w/ 692 levels "201500","20202",..: 361 360 680 499 138 367 315 523 592 304 ...
 $ CountryCode        : Factor w/ 2 levels "JP","US": 1 1 2 2 1 1 1 2 2 1 ...
 $ OrderType          : Factor w/ 1 level "Online": 1 1 1 1 1 1 1 1 1 1 ...
 $ Support   : Factor w/ 4 levels "BN","MC",..: 3 3 3 3 1 3 3 3 3 3 ...
 $ Manuf      : Factor w/ 1 level "DY": 1 1 1 1 1 1 1 1 1 1 ...
 $ line       : Factor w/ 2 levels "CX","OTX": 2 1 2 2 2 2 2 2 2 2 ...

在我看来,gsub 并没有真正对原始 data.frame 进行细分,隐藏的值一直留在 train.set 中,直到我 export/import 火车。还有其他方法可以做这个操作得到一棵树吗?

如错误所述,您的因变量 line 有超过 32 个水平。根据您的 train.set 结构 line : Factor w/ 623 levels

尝试使用其他树库,例如 rpart

子集后重构可能会有所帮助。

sapply(train.set, {function(x) if(class(x) == "factor") {factor(x)}})

此外,gsub 通常不用于子集化。它是全局替换函数。您应该分享所遵循的预处理步骤,以帮助其他人更好地帮助您。