我有一个向量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))
但这对我来说很糟糕。有谁知道更好的解决方案或不同的方法?
答案 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)
以获得上述结果。
请注意,这将修改原始矢量本身,因此您可能希望复制到另一个矢量并对其进行处理。