Binning числовая переменная в R

У меня есть вектор 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 мне. Кто-либо знает лучшее решение или другой подход?

11
задан 4 revs, 2 users 64% 3 December 2015 в 18:55
поделиться

3 ответа

Как насчет 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+
20
ответ дан 3 December 2019 в 03:04
поделиться
x[x>=10]<-"10+"

Это даст вам вектор строк. Вы можете использовать as.numeric (x) , чтобы преобразовать обратно в числа («10+» становится NA ), или as.factor (x) , чтобы получить ваш результат выше.

Обратите внимание, что это изменит сам исходный вектор, поэтому вы можете скопировать его в другой вектор и поработать над ним.

2
ответ дан 3 December 2019 в 03:04
поделиться

Ваш вопрос противоречивый.
В описании 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
7
ответ дан 3 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: