我有一个向量 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))
但这对我来说感觉很糟糕。有谁知道更好的解决方案或不同的方法?
怎么样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+
你的问题前后矛盾。
在描述中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
x[x>=10]<-"10+"
这将为您提供一个字符串向量。您可以使用as.numeric(x)
转换回数字(“10+” 变为NA
),或as.factor(x)
获得上面的结果。
请注意,这将修改原始向量本身,因此您可能希望复制到另一个向量并进行处理。