11

我有一个向量 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))

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

4

3 回答 3

22

怎么样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+
于 2010-03-24T02:14:33.450 回答
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
于 2010-03-24T14:58:27.963 回答
3
x[x>=10]<-"10+"

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

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

于 2010-03-24T18:15:51.480 回答