У меня есть фрейм данных с m
строками и n
столбцами, все значения нормализованы в диапазоне от 0 до 1.
Я бы хотел, чтобы каждая точка определяла n
-мерный куб (желательно, чтобы точка была в центре этого куба, в зависимости от того, является ли значение на каждой оси центральным или нет) с каждой стороной, равной 0,2, и посчитайте, сколько точек данных лежит в этом кубе.
Например:
df <- structure(list(x1 = c(0, 0.01, 0.05, 0.07, 0.1, 0.11, 0.16, 0.18,
0.2, 0.25, 0.5), x2 = c(0.05, 0.3, 0.1, 0.17, 0.38, 0.01, 0.04,
0.05, 0.11, 0.21, 0.26), x3 = c(0.4, 0.07, 0.09, 0.1, 0.23, 0.4,
0.2, 0.11, 0.01, 0.34, 0.22)), row.names = c(NA, -11L), class = c("tbl_df",
"tbl", "data.frame"))
Первая точка не может быть центром куба, потому что ее значения x
и y
слишком близки к 0. Куб, который он определяет, определяется ограничениями:
x1 >= 0 and x1 <= 0.2
x2 >= 0 and x2 <= 0.2
x3 >= 0.3 and x3 <= 0.5
Таким образом, первый куб содержит только точки (0,05, 0,4) и (0,11, 0,01, 0,4).
Вторая точка определяет куб:
x1 >= 0 and x1 <= 0.2
x2 >= 0.2 and x2 <= 0.4
x3 >= 0 and x3 <= 0.2
и содержит только себя.
Теперь я хотел бы иметь возможность эффективно выполнять эту фильтрацию для произвольных n
и m
(базовых или dplyr
, пожалуйста).
Есть идеи?