在 R 中将连续范围更改为分类范围
Changing Continuous Ranges to Categorical in R
我试图将一些连续整数转换为分类范围,但发生了一些我不明白的事情。虽然我固定得到我想要的,但我仍然不明白为什么会这样。
变量是0到12之间的一些整数,下面的代码把10
、11
、12
从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"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain>=5]<-"5+"
py2$Daily.Whole.Grain<-as.factor(py2$Daily.Whole.Grain)
但是当我改变转换顺序时,它包括10
、11
、12
。
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+
我试图将一些连续整数转换为分类范围,但发生了一些我不明白的事情。虽然我固定得到我想要的,但我仍然不明白为什么会这样。
变量是0到12之间的一些整数,下面的代码把10
、11
、12
从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"
py2$Daily.Whole.Grain[py2$Daily.Whole.Grain>=5]<-"5+"
py2$Daily.Whole.Grain<-as.factor(py2$Daily.Whole.Grain)
但是当我改变转换顺序时,它包括10
、11
、12
。
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+