2013-12-05 3 views
0

я следующие данныеПолучить частоты значений в пределах определенного диапазона

data<-c(3,4,5,6,5,4,5,6,7,5) 
lowerLimits<-c(2,4,6) 
upperLimits<-c(4,6,8) 

Как я рассчитывать элементы данных, которые> = lowerLimits и < upperLimits. Таким образом, результат должен нравится:

result<-c(1,6,3) 

Я уверен, что это будет легко с помощью петель, но это не может быть эффективным. Кто-нибудь знает лучшее решение?

+0

Откуда вы получаете 1,6,3? Я ничего не вижу нигде, кроме результата – rafee

+1

Хотел бы я просто проголосовать за закрытие на основе вероятности того, что this спросили и ответили как минимум 5 раз на SO. –

+0

@rafee есть 1 элемент, находящийся в диапазоне [2; 4 [ – user3071779

ответ

1

Вы можете использовать mapply и немного логической функции:

myfun <- function(ll, ul) { 
    sum(data >= ll & data < ul) 
} 

mapply(myfun, lowerLimits, upperLimits) 
# [1] 1 6 3 
+0

Thnak you !! Хорошо работает – user3071779

0
> sapply(seq(length(lowerLimits)), function(x) sum(data > lowerLimits[x] & data <= upperLimits[x])) 
[1] 3 6 1 
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).

+0

Спасибо за ваш ответ! – user3071779

Смежные вопросы