首页 > 解决方案 > 在标签间隔中用符号切割变量

问题描述

与其手动写出区间标签,人们会如何将符号放在+变量的最终区间中,例如cut

我可以像这样剪切一个变量:

set.seed(1)
variab <- sample(0:100, 100, replace = FALSE)
variab
table(cut(variab, breaks = c(0, 1:4, Inf), include.lowest=TRUE))
#   [0,1]   (1,2]   (2,3]   (3,4] (4,Inf] 
#       2       1       0       1      96 

如果我想输入一个符号,我可以这样做:

table(cut(variab, breaks = c(0, 1:4, Inf), include.lowest=TRUE, labels = c(0:3, "4+")))
#  0  1  2  3 4+ 
#  2  1  0  1 96 

但我想要的是:

#   [0,1]   (1,2]   (2,3]   (3,4] (4, 4+] 
#       2       1       0       1      96

另外,我还想在dplyr管道深处执行此操作:

library(tidyverse)
df <- data.frame(variab)
df %>% 
  mutate(cut(variab, breaks = c(0, 1:4, Inf), include.lowest=TRUE))

我确定答案在某处,但我无法找到它。

谢谢

标签: rdata-manipulation

解决方案


这些levels是字符值,您可以使用更改级别sub

var <- cut(variab, breaks = c(0, 1:4, Inf), include.lowest=TRUE)
levels(var) <- sub('Inf', '4+', levels(var))
table(var)
#var
# [0,1]  (1,2]  (2,3]  (3,4] (4,4+] 
#     2      1      0      1     96 

对于数据框中的数据,您可以执行以下操作:

df %>% 
  mutate(var = cut(variab, breaks = c(0, 1:4, Inf), include.lowest=TRUE),
         var = sub('Inf', '4+', var))

推荐阅读