为什么我的R代码出现“非唯一中断”错误?

问题描述

我是R的新手,所以这可能是一个愚蠢的错误。我正在尝试使用cut函数,但是我仍然遇到相同的错误。错误是:

Error: Problem with `mutate()` input `Calls_bucket`.
x 'breaks' are not unique
i Input `Calls_bucket` is `cut(...)

这是我的代码(我尝试了许多不同的变体。这是最近的两个):

m3 <- m2 %>%
  mutate(Calls_bucket=cut(Calls_per_Hour,c(2,4,6,8,10,12,14,16,18,20,max(Calls_per_Hour,na.rm=T)),labels=c("0-2","2-4","4-6","6-8","8-10","10-12","12-14","14-16","16-18","18-20",">20")))

m3 <- m2 %>%
  mutate(Calls_bucket=cut(Calls_per_Hour,breaks=c(2,">20")))

如果我只选择中断次数,我就可以使它工作,但是我想专门定义它们。该代码有效,例如:

m3 <- m2 %>%
  mutate(Calls_bucket=cut(Calls_per_Hour,12))

先谢谢。任何帮助将不胜感激。

解决方法

对我来说,当我将0作为第一个剪切时,它起作用了。并指定为include.lowest = TRUE。因此,每个0都包含在第一类中。通过将include.lowest设置为FALSE(默认设置),会将0转换为NA。

m2 <- data.frame(Calls_per_Hour = 0:25)

m3 <- m2 %>%
  mutate(Calls_bucket=cut(Calls_per_Hour,c(0,2,4,6,8,10,12,14,16,18,20,Inf),labels=c("0-2","2-4","4-6","6-8","8-10","10-12","12-14","14-16","16-18","18-20",">20"),include.lowest = TRUE))

一个注释。在您的示例中,标签不清晰。如果我读0-2和2-4,我将不知道在哪里包括2。因此,在您的实际代码中,您可以明确地设置标签(0-2、3-4)。

,

在定义中断时,如果使用的是unique(),请使用max(Calls_per_Hour)。 这对我有用

m3 <- m2 %>%
    mutate(Calls_bucket=cut(Calls_per_Hour,unique(c(0,max(Calls_per_Hour,na.rm=TRUE))),include.lowest = T))
  • unique()确保剪切的唯一向量,即,如果max(Calls_per_Hour)等于给定向量中的值,则剪切保持唯一。
  • 由于使用0开头的标签,因此剪切时还应包含0。
  • 设置include.lowest=TRUE可确保为遇到的最低值分配一个标签。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...