В дополнение к Хонгу, который предлагает хорошее решение, я нашел кое-что весьма полезное в ggplot2:
cut_interval
- создать n групп с одинаковым диапазоном
cut_number
- составить n групп с примерно равными наблюдениями
cut_width
- сделать n групп равной ширины
По моему мнению, эти функции обеспечивают большую гибкость и проще для понимания, чем функция базового среза. Обратите внимание, что функции возвращают коэффициенты вместо матрицы.
Вы можете использовать что-то вроде этого:
df <- matrix(c(5,3,0,1,10,12,3,0,10), nrow=3)
m.df <- melt(df)
m.df$value <- cut_width(m.df$value, width=2, boundary=0)
Это вернет
Var1 Var2 value
1 1 1 (4,6]
2 2 1 (2,4]
3 3 1 [0,2]
4 1 2 [0,2]
5 2 2 (8,10]
6 3 2 (10,12]
7 1 3 (2,4]
8 2 3 [0,2]
9 3 3 (8,10]
При необходимости вы можете привести его обратно к квадратной матрице:
df.bins <- acast(m.df, Var1~Var2)
Наконец дает:
1 2 3
1 (4,6] [0,2] (2,4]
2 (2,4] (8,10] [0,2]
3 [0,2] (10,12] (8,10]
Levels: [0,2] (2,4] (4,6] (6,8] (8,10] (10,12]