问题描述
我是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
可确保为遇到的最低值分配一个标签。