在 R 中将连续范围更改为分类范围

Changing Continuous Ranges to Categorical in R

我试图将一些连续整数转换为分类范围,但发生了一些我不明白的事情。虽然我固定得到我想要的,但我仍然不明白为什么会这样。

变量是0到12之间的一些整数,下面的代码把1011125+类中去掉。

py2$Daily.Whole.Grain[py2$Daily.Whole.Grain==0]<-"0"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain==1]<-"1"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain==2]<-"2"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain==3]<-"3"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain==4]<-"4"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain>=5]<-"5+"
py2$Daily.Whole.Grain<-as.factor(py2$Daily.Whole.Grain)

但是当我改变转换顺序时,它包括101112

py2$Daily.Whole.Grain[py2$Daily.Whole.Grain>=5]<-"5+"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain==0]<-"0"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain==1]<-"1"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain==2]<-"2"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain==3]<-"3"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain==4]<-"4"

谁能解释一下,为什么它会漏掉两位数的整数? 非常感谢。

如@CathG 所述,问题是由于将列从 numeric class 转换为 character。这也许是一个更好的解决方案,它使用 cut 函数,它会根据变量的切点为您提供因子:

py2 <- data.frame(Daily.Whole.Grain = 1:10)
py2$Daily.Whole.Grain1 <- cut(py2$Daily.Whole.Grain, 
    breaks = c(1:5, Inf), right = FALSE, labels = c(1:4, "5+"))
py2
   Daily.Whole.Grain Daily.Whole.Grain1
1                  1                  1
2                  2                  2
3                  3                  3
4                  4                  4
5                  5                 5+
6                  6                 5+
7                  7                 5+
8                  8                 5+
9                  9                 5+
10                10                 5+