对于过程参数,有上限和下限。收集数据并将其存储在矢量中后,我尝试使用cut
函数重新编码矢量。
我是怎么做的(例如):
x = mtcars$mpg
cut(x, breaks = c(-Inf,20, 30, Inf), labels = c("low","good","high"))
这很漂亮。
但是当我尝试将太高和太低的值标记为“失败”时,会出现错误消息:
x = mtcars$mpg
cut(x, breaks = c(-Inf,20, 30, Inf), labels = c("failure","pass","failure"))
Error in `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, : factor level [3] is duplicated
显然,cut
函数不会期望我们提供重复的标签。
对此有任何解决方法吗?
答案 0 :(得分:1)
如果您想继续使用cut
,一种选择是在levels
之后更改cut
x1 <- cut(x, breaks = c(-Inf,20, 30, Inf), labels = c("low","good","high"))
levels(x1) <- c("failure","pass","failure")
但是,您可以使用简单的cut
ifelse
ifelse(x >= 20 & x <= 30, "pass", "failure")
或者只是
c("failure", "pass")[(x >= 20 & x <= 30) + 1]
或者,如果有多个条件需要检查,我们可以使用case_when
中的dplyr
,并在需要时添加条件。
library(dplyr)
mtcars %>%
mutate(result = case_when(mpg >= 20 & mpg <= 30 ~ "pass",
TRUE ~ "failure"))
答案 1 :(得分:0)
从使用cut
的方式开始,您可以重新编码值。
x = mtcars$mpg
F1 = cut(x, breaks = c(-Inf,20, 30, Inf), labels = c("low","good","high"))
F2 = factor(ifelse(F1=="good", "pass", "failure"))