2013-03-06 2 views
-1

У меня есть набор данных, который относится к скоростям разных людей ... так что мои данные выглядят следующим образом Таким образом, ее в основном только список скоростиКак принимать частоты разных диапазонов, используя R?

Velocity(m/s) 
1.2 
1.4 
2.3 
1.6 
4.5 
3.5 
1.7 
4.5 
3.7 

Я хочу использовать R, чтобы получить различные диапазоны и частота этого конкретного диапазона ... например я хочу, выход аналогичный приведенному ниже

Velocity(m/s)  Frequency 
1.0 - 3.0   7 
1.5- 2.0    4 

...

Так что я хочу, чтобы получить столбец частот для различных диапазонов. Я действительно новичок в R и действительно хотел бы использовать его для анализа некоторых моих данных.

+2

Диапазоны вид нечетным –

+1

Не могли бы вы разъяснить @ комментарий LucianoSelzer в? – Arun

+0

Буду рад проголосовать за разъяснения. – Arun

ответ

3

Вы можете сделать это легко с помощью комбинации cut и table. Первая позволяет генерировать 100 случайных чисел от 0 & 100:

r = runif(100, 0, 100) 

Далее, где мы хотим, чтобы разрывы появляются. В этом примере, мы хотим их: 0, 10, ..., 100:

cut(r, breaks=seq(0, 100, 10)) 

Затем используйте команду table для расчета частоты:

table(cut(r, breaks=seq(0, 100, 10))) 

Вы, кажется, хотите перекрывающихся разрывы, поэтому я хотел бы использовать команду table дважды, т.е.

t1 = table(cut(r, breaks=seq(0, 100, 10))) 
t2 = table(cut(r, breaks=seq(0, 100, 5))) 

Затем объединить результаты

c(t1, t2) 
+0

спасибо csgillespie .... но uhhm Я получил эту ошибку Ошибка в cut.default (f, breaks = seq (0, 4, 2)): 'x' должно быть числовым –

+0

Без ваших фактических данных трудно определить, что неправильно. Мой пример работает на вас? В вашем случае, я подозреваю, что 'f' имеет в нем символ. – csgillespie

1

Я хотел бы создать data.frame с минимальными и максимальными скоростями для каждого диапазона:

my.summary <- data.frame(vel.lo = c(1, 1.5), 
         vel.hi = c(3, 2)) 

Затем с помощью plyr «s adply для подсчета частоты:

library(plyr) 
adply(my.summary, 1, transform, freq = sum(dat$Velocity > vel.lo & 
              dat$Velocity <= vel.hi)) 
# vel.lo vel.hi freq 
# 1 1.0  3 5 
# 2 1.5  2 2 

Примечание: вы также можете просто использовать базовый пакет apply, но так как он уменьшает имена столбцов, я нахожу, что adply дает код, который читает b Etter чем:

my.summary$freq <- apply(my.summary, 1, function(x)sum(dat$Velocity > x[1] & 
                 dat$Velocity <= x[2]))