У меня есть вектор 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))
но это чувствует klugey мне. Кто-либо знает лучшее решение или другой подход?
Как насчет 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+
x[x>=10]<-"10+"
Это даст вам вектор строк. Вы можете использовать as.numeric (x)
, чтобы преобразовать обратно в числа («10+» становится NA
), или as.factor (x)
, чтобы получить ваш результат выше.
Обратите внимание, что это изменит сам исходный вектор, поэтому вы можете скопировать его в другой вектор и поработать над ним.
Ваш вопрос противоречивый.
В описании 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