Вопрос все еще не очень хорошо сформулирован, поэтому я не уверен, что полностью понял, что вы хотите, но вы, вероятно, хотите использовать комбинацию table
и cut
.
Вашпример данных
input1 <- data.frame(
type = paste("a", rep(1:2, times = c(3, 1)), sep = ""),
lower = c(100, 250, 333, 450),
upper = c(200, 270, 340, 460)
)
input2 <- data.frame(
type = rep.int("a1", 28),
lower = rep(c(101, 112, 258, 260, 332, 331), times = c(1, 1, 9, 5, 7, 5)),
upper = rep(c(106, 117, 259, 262, 333), times = c(1, 1, 9, 5, 12))
)
Сначала вы определяете ячейки на основе значений в input1
.
cut_points <- with(input1, sort(c(start, end)))
Затем разбиваете input2$start
по типу, делите его на ячейки и находите счетв каждом.
with(input2, tapply(start, type, function(x) table(cut(x, cut_points))))
Возможно, повторите с колонкой end
.
with(input2, tapply(end, type, function(x) table(cut(x, cut_points))))