当我尝试将我的数值变量转换为分类变量时,我遇到了一些问题。我希望将我的专栏“Price”分成20个分区(然后为了做分类树)。
我尝试使用功能剪切,但它有效,但我的间隔用科学记数法表示......
以下是我的数据示例:
Mydata <- data.frame(
Price = c(13500,13750,13950,14950,13750,12950)
)
这是我的代码:
Mydata[,2] = cut(Mydata$Price, 3, include.lowest=TRUE)
然后,我的第二个Colonne有像(3.11e + 04,3.25e + 04)这样的数字。 我也使用参数labels = FALSE,但这不是我正在寻找的(然后,箱子用数字表示 - > 1,2,3,...,20。我希望它们被表达间隔 - > [0; 1000],[1000,2000]等......)
提前感谢您的帮助
答案 0 :(得分:2)
我找到了解决方案!用dig.lab
Mydata <- data.frame(
Price = c(13500,13750,13950,14950,13750,12950)
)
这是我的代码:
Mydata[,2] = cut(Mydata$Price, 3, include.lowest=TRUE, dig.lab = 5)
无论如何,谢谢您的提示:)
答案 1 :(得分:0)
如果您的对象Mydata
有类matrix
,那么我可以了解可能发生的事情:
cut()
函数返回如下所示的因子:
> x <- runif(10, 0, 2)
> cut(x, 2)
[1] (1.01,1.95] (1.01,1.95] (0.069,1.01] (1.01,1.95] (1.01,1.95]
(1.01,1.95] (1.01,1.95] (1.01,1.95] (1.01,1.95]
[10] (1.01,1.95]
Levels: (0.069,1.01] (1.01,1.95]
cut()
函数自然返回一组间隔(按照您的要求)。输出是因子。 这很重要。现在看一下当我强制输出为数字时会发生什么:
> as.numeric(cut(x, 2))
[1] 2 2 1 2 2 2 2 2 2 2
这是一个数字向量。为什么这很重要?因为matrix
中的类R
的对象只能有一种类型。添加到矩阵的任何新值都将强制到矩阵中其余条目的类型。观看:
> X_mat <- matrix(1:10L, nrow = 10, ncol = 2)
> X_mat[, 2] <- cut(x, 2)
> X_mat
[,1] [,2]
[1,] 1 2
[2,] 2 2
[3,] 3 1
[4,] 4 2
[5,] 5 2
[6,] 6 2
[7,] 7 2
[8,] 8 2
[9,] 9 2
[10,] 10 2
cut()
函数返回的时间间隔消失了,因为它们已转换为类numeric
以匹配矩阵X_mat
的其余部分。如果我们使用数据框怎么办?
> X_df <- data.frame(x1 = 1:10L)
> X_df[, 2] <- cut(x, 2)
> X_df
x1 V2
1 1 (1.01,1.95]
2 2 (1.01,1.95]
3 3 (0.069,1.01]
4 4 (1.01,1.95]
5 5 (1.01,1.95]
6 6 (1.01,1.95]
7 7 (1.01,1.95]
8 8 (1.01,1.95]
9 9 (1.01,1.95]
10 10 (1.01,1.95]
基本上,如果您想保留cut()
输出的结构,则您的数据需要位于data.frame
而不是matrix
。希望这有帮助!