将数字数据突变为 "high" "medium" 和 "low" 产生的 between() 调用数字向量与 S3 class

Mutation of numeric Data into "high" "medium" and "low" produced between() called on numeric vector with S3 class

我试图通过

将数字数据突变为“高”、“中”和“低”
library(dplyr)

mdata %>%
  mutate(mvariable = case_when(vari < quantile(vari,0.5) ~ 'low', 
                      between(vari, quantile(vari, 0.5), quantile(vari, 0.75))~'med', 
                      TRUE ~ 'high'))

在多层次分析中使用它。

它没有生成我想要的数据,但告诉我:

between() 使用 S3 class

调用数值向量

我做错了什么?

提前致谢。

我正在使用 R 版本 4.1.2 -- “Bird Hippie”

另一种解决方案(不知道数据)可能是通过切换 case_when:

的顺序来完全绕过 between 函数
library(tidyverse)
mdata <- mdata %>%
  mutate(mvariable = case_when(vari < quantile(vari, 0.5) ~ 'low',
                               vari > quantile(vari, 0.75) ~ 'high', 
                               TRUE ~ 'med'))

你试过了吗base::cut()

library(dplyr)

mdata %>% 
  mutate(mvariable = cut(vari, 
                         breaks=c(-Inf, 0.5, 0.75, Inf), 
                         labels=c("low", "med", "high")))

标记时,标签需要 n 次中断 - 1。即,标签 = 中断 - 1。 因此,如果您有 5 个中断,则需要 4 个标签,4 个中断需要 3 个标签,依此类推。

编辑:

您还可以使用动态分位数,它会根据您的数据而变化。

library(dplyr)

mdata %>% 
  mutate(mvariable = cut(vari, 
                         breaks=c(-Inf, quantile(vari)[3], quantile(vari)[4], Inf), 
                         labels=c("low", "med", "high")))