我有以下数据
data<-c(3,4,5,6,5,4,5,6,7,5)
lowerLimits<-c(2,4,6)
upperLimits<-c(4,6,8)
我如何计算数据中的元素&gt; = lowerLimits和&lt; upperLimits。 所以结果应该是这样的:
result<-c(1,6,3)
我确信使用循环会很容易,但这不会有效。有人知道更好的解决方案吗?
答案 0 :(得分:1)
二进制索引树或BIT完全符合您的要求 - &gt; see this nice totorial
答案 1 :(得分:1)
您可以使用mapply
和一点逻辑功能:
myfun <- function(ll, ul) {
sum(data >= ll & data < ul)
}
mapply(myfun, lowerLimits, upperLimits)
# [1] 1 6 3
答案 2 :(得分:0)
> sapply(seq(length(lowerLimits)), function(x) sum(data > lowerLimits[x] & data <= upperLimits[x]))
[1] 3 6 1
答案 3 :(得分:0)
如果您的下限和上限是连续范围,您还可以使用cut
和table
。
> data <- c(3,4,5,6,5,4,5,6,7,5)
> breaks <- c(2, 4, 6, 8)
> counts <- table(cut(data, breaks=breaks, right=FALSE))
[2,4) [4,6) [6,8)
1 6 3
注意counts
将是table
个对象,因此如果您需要向量,则可以as.vector(counts)
。