使用离散化后分类变量级别的标签

问题描述

我尝试使用arules软件包的离散化函数转换变量。但是输出中有非常尴尬的标签。任何人都可以建议如何将这些标签转换为“低”,“中”,“高”或仅1、2、3。

library(arules)
#> Warning: package 'arules' was built under R version 3.6.3
#> Loading required package: Matrix
#> 
#> Attaching package: 'arules'
#> The following objects are masked from 'package:base':
#> 
#>     abbreviate,write
discretize(iris[,1],breaks = 3)
#>   [1] [4.3,5.4) [4.3,5.4) [5.4,6.3) [4.3,5.4)
#>   [8] [4.3,5.4)
#>  [15] [5.4,6.3) [5.4,6.3)
#>  [22] [4.3,5.4)
#>  [29] [4.3,5.4)
#>  [36] [4.3,5.4)
#>  [43] [4.3,5.4)
#>  [50] [4.3,5.4) [6.3,7.9] [6.3,7.9] [5.4,6.3) [6.3,6.3)
#>  [57] [6.3,7.9] [4.3,6.3)
#>  [64] [5.4,6.3)
#>  [71] [5.4,7.9]
#>  [78] [6.3,6.3)
#>  [85] [5.4,6.3)
#>  [92] [5.4,6.3)
#>  [99] [4.3,7.9]
#> [106] [6.3,7.9]
#> [113] [6.3,7.9]
#> [120] [5.4,7.9]
#> [127] [5.4,7.9]
#> [134] [6.3,7.9]
#> [141] [6.3,7.9]
#> [148] [6.3,6.3)
#> attr(,"discretized:breaks")
#> [1] 4.3 5.4 6.3 7.9
#> attr(,"discretized:method")
#> [1] frequency
#> Levels: [4.3,7.9]
table(discretize(iris[,breaks = 3))
#> 
#> [4.3,7.9] 
#>        46        53        51

解决方法

如果我正确阅读了您的目标,则可以使用基本cut函数执行相同的操作。例如,

cut(iris$Sepal.Length,breaks = c(4.3,5.4,6.3,7.9),labels = c('lo','med','hi'))

如果要用切割代替值:

cuts <- cut(iris$Sepal.Length,'hi'))
iris$Sepal.Length <- cuts

只需用自己的标签替换标签即可。

,

对于一列,您可以执行以下操作:

discretize(iris[,1],breaks = 3,labels=c(letters[1:3]))

对于data.frame,您可以使用default=参数传递命令:

discretizeDF(iris,default = list(method = "interval",labels=1:3))

这些可以在help page中提供的示例中找到。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...