A.categ <- cut(A, breaks = c(-Inf, 10, 20, 30, Inf), right=FALSE)
B.categ <- cut(B, breaks = c(-Inf, 1, 10, 100, Inf), right=FALSE)
table(A.categ, B.categ)
Хитрость с cut
заключается в том, чтобы не забыть установить right = FALSE, так как большинство людей ожидают, что это сработает. Фактически, когда Фрэнк Харрелл сделал свою версию cut2
для Hmisc, он установил ее в качестве опции по умолчанию.
Когда вы делаете это с примером, созданным Томми, вы получаете
> A.categ <- cut(d$A, breaks = c(-Inf, 10, 20, 30, Inf), right=FALSE)
> B.categ <- cut(d$B, breaks = c(-Inf, 1, 10, 100, Inf), right=FALSE)
> table(A.categ, B.categ)
B.categ
A.categ [-Inf,1) [1,10) [10,100) [100, Inf)
[-Inf,10) 0 1 1 9
[10,20) 0 2 3 2
[20,30) 0 5 4 1
[30, Inf) 0 17 11 44
Не каждый понимает соглашение об открытии / закрытии, поэтому иногда вам нужно пойти и переработать labels
факторизованной переменной, которую вы сконструировали с помощью cut
, чтобы менее математически склонный клиент мог сопоставить ее со своими соглашениями. Вы используете функцию factor
и задаете аргумент labels
(и НЕ указываете аргумент levels
, иначе вы «сломаете переменную»)
> A.categ <- factor(A.categ, labels=c(" Less than 1", "1-9.9", "10-99.9" , "100+") )
> table(A.categ, B.categ)
B.categ
A.categ [-Inf,1) [1,10) [10,100) [100, Inf)
Less than 1 0 1 1 9
1-9.9 0 2 3 2
10-99.9 0 5 4 1
100+ 0 17 11 44