Используйте cut
для координат x
и y
с перерывами каждые 25 или что-то еще, тогда вы можете использовать dplyr
для подсчета по группам.
library(dplyr)
df %>% mutate(
cut_x = cut(X1, breaks = seq(0, 100, by = 25), include.lowest = T),
cut_y = cut(X2, breaks = seq(0, 100, by = 25), include.lowest = T)
) %>%
count(cut_x, cut_y)
# # A tibble: 16 x 3
# cut_x cut_y n
# <fct> <fct> <int>
# 1 [0,25] [0,25] 6
# 2 [0,25] (25,50] 4
# 3 [0,25] (50,75] 6
# 4 [0,25] (75,100] 9
# 5 (25,50] [0,25] 3
# 6 (25,50] (25,50] 2
# 7 (25,50] (50,75] 6
# 8 (25,50] (75,100] 6
# 9 (50,75] [0,25] 5
# 10 (50,75] (25,50] 6
# 11 (50,75] (50,75] 6
# 12 (50,75] (75,100] 4
# 13 (75,100] [0,25] 8
# 14 (75,100] (25,50] 13
# 15 (75,100] (50,75] 10
# 16 (75,100] (75,100] 6