【问题标题】:Changing Continuous Ranges to Categorical in R在R中将连续范围更改为分类
【发布时间】:2015-03-24 14:35:52
【问题描述】:

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

变量是一些从0到12的整数,下面的代码将10,11,125+类别中移出。

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"

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

【问题讨论】:

  • 您将变量更改为character,您可以检查"10" &gt; "5",它将给出FALSE,因此没有101112(但@ 987654336@ 将包括在内)。最好的办法是创建另一个变量而不是修改现有变量(您可以避免在 6 行中完成),或者如果您真的想修改变量,可以使用 as.integer
  • 其实你可以通过py2$Daily.Whole.Grain[py2$Daily.Whole.Grain&gt;=5]&lt;-"5+"得到你想要的,因为其他值只是转换为字符

标签: r continuous categorical-data


【解决方案1】:

正如@CathG 提到的,问题是由于将列从numeric 类转换为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+

【讨论】:

  • 谢谢 Jeff,我不想使用 cut 函数,因为我想要更好的分类名称。 @CathG 的第二条评论真的帮助我理解发生了什么。谢谢你们。
  • 不客气。您也可以将labels = c(1:4, "5+") 添加到cut 函数中以获得您想要的,但@CathG 的解决方案要短一些! (我已经编辑了我的答案以获得这个)。
猜你喜欢
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多