Рассмотрим следующее data.frame
,
d <- data.frame(x = seq(0, 10, length=100), value = rnorm(100))
Я хочу установить подмножество на основе x
, принадлежащего любому из следующих интервалов,
intervals <- list(c(0.2, 0.8), c(1, 2), c(8, 8.2))
test <- function(range, x){
which(x >= range[1] & x <= range[2])
}
d[Reduce(`union`, lapply(intervals, test, x=d$x)), ]
Теперь функция тестирования кажется избыточной, так как выглядит очень похоже на встроенную findInterval
, но я не могу найти элегантный способ ее использования.
condition <- Reduce(`|`, lapply(lapply(intervals, findInterval,
x=d$x, all.inside=FALSE), `==`, 1))
d[condition, ]
Можете ли вы предложить лучше?