在R中分箱数字变量

时间:2010-03-24 01:41:13

标签: r binning

我有一个向量X,其中包含我想要分组/离散化的正数。对于这个向量,我希望数字[0,10]正好显示在向量中,但数字[10,∞)为10+。

我正在使用:

x <- c(0,1,3,4,2,4,2,5,43,432,34,2,34,2,342,3,4,2)
binned.x <- as.factor(ifelse(x > 10,"10+",x))

但这对我来说很糟糕。有谁知道更好的解决方案或不同的方法?

3 个答案:

答案 0 :(得分:20)

cut

怎么样?
binned.x <- cut(x, breaks = c(-1:9, Inf), labels = c(as.character(0:9), '10+'))

哪个收益率:

 # [1] 0   1   3   4   2   4   2   5   10+ 10+ 10+ 2   10+ 2   10+ 3   4   2  
 # Levels: 0 1 2 3 4 5 6 7 8 9 10+

答案 1 :(得分:7)

你的问题不一致 在说明10属于“10+”组,但在代码10中是分开的级别。 如果10 应该在“10+”组中,那么您的代码应为

as.factor(ifelse(x >= 10,"10+",x))

在这种情况下,您可以将数据截断为10(如果您不想要因素):

pmin(x, 10)
# [1]  0  1  3  4  2  4  2  5 10 10 10  2 10  2 10  3  4  2 10

答案 2 :(得分:2)

x[x>=10]<-"10+"

这将为您提供一个字符串向量。您可以使用as.numeric(x)转换回数字(“10+”变为NA)或as.factor(x)以获得上述结果。

请注意,这将修改原始矢量本身,因此您可能希望复制到另一个矢量并对其进行处理。