请考虑以下
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, ]
你能提出更好的建议吗?
findInterval
解决方案。 - James