Составление таблицы частот
-
- Активный участник
- Сообщения: 117
- Зарегистрирован: 31 окт 2011, 00:18
- Репутация: 14
- Откуда: Кривий Ріг
Составление таблицы частот
Есть вектор чисел (NUMERIC) длиной несколько тысяч записей. Стоит задача составить таблицу частот с заданным шагом: например, с шагом в единицу вычислить сколько значений из исходного вектора попадает в каждый из интервалов. Функция stem выдаёт непонятное месиво цифр.
-
- Интересующийся
- Сообщения: 40
- Зарегистрирован: 11 авг 2011, 13:23
- Репутация: 15
Re: Составление таблицы частот
Если я правильно понял вопрос, то могу предложить такое решение:
Сначала построить вектор с границами интервалов. Для этого стандартно используется функция seq().
Пусть вектор с данными -- А, тогда границы интервалов -- B<-seq(min(A),max(А),by=y), где y -- величина интервала. Тогда таблицу частот можно получить следующим образом: С<-table(cut(A,B)).
Так же можно предложить функцию, с более привычным выводом результатов:
count.f<-function(x,y){
A<-seq((round(min(x))-y),(round(max(x))+y),by=y)
B<-table(cut(x,A))
B<-as.numeric(B)
A1<-paste(A[c(1:(length(A))-1)],A[c(2:(length(A)))],sep="-")
C<-data.frame(bound=A1,freq=B)
C
}
Здесь x -- Ваш вектор, а y -- величина интервала.
Надеюсь помог.
Сначала построить вектор с границами интервалов. Для этого стандартно используется функция seq().
Пусть вектор с данными -- А, тогда границы интервалов -- B<-seq(min(A),max(А),by=y), где y -- величина интервала. Тогда таблицу частот можно получить следующим образом: С<-table(cut(A,B)).
Так же можно предложить функцию, с более привычным выводом результатов:
count.f<-function(x,y){
A<-seq((round(min(x))-y),(round(max(x))+y),by=y)
B<-table(cut(x,A))
B<-as.numeric(B)
A1<-paste(A[c(1:(length(A))-1)],A[c(2:(length(A)))],sep="-")
C<-data.frame(bound=A1,freq=B)
C
}
Здесь x -- Ваш вектор, а y -- величина интервала.
Надеюсь помог.
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Составление таблицы частот
1) stem выдает представление гистограммы, рассчитанное на алфавитно-цифровые принтерыymr3R9Jge писал(а):Есть вектор чисел (NUMERIC) длиной несколько тысяч записей. Стоит задача составить таблицу частот с заданным шагом: например, с шагом в единицу вычислить сколько значений из исходного вектора попадает в каждый из интервалов. Функция stem выдаёт непонятное месиво цифр.
Там все понятно, до "палки" - целые, после палки - десятичные, т.е. интервалы с шагом 0.1
2) для вашей задачи придумана гистограмма hist(my.data,plot=FALSE,breaks=seq(0,100,by=1.0))
Код: Выделить всё
x<-runif(1000,10,20)
x.hist<-hist(x,breaks=seq(10,20,by=1),plot=FALSE)
# смотрим содержимое, читаем про него в справочнике ...
?hist
str(x.hist)
List of 7
$ breaks : num [1:11] 10 11 12 13 14 15 16 17 18 19 ...
$ counts : int [1:10] 118 101 106 113 92 102 89 104 85 90
$ intensities: num [1:10] 0.118 0.101 0.106 0.113 0.092 0.102 0.089 0.104 0.085 0.09
$ density : num [1:10] 0.118 0.101 0.106 0.113 0.092 0.102 0.089 0.104 0.085 0.09
$ mids : num [1:10] 10.5 11.5 12.5 13.5 14.5 15.5 16.5 17.5 18.5 19.5
$ xname : chr "x"
$ equidist : logi TRUE
- attr(*, "class")= chr "histogram"
# границы интервалов и полученные счетчики
cbind(x.hist$breaks[-length(x.hist$breaks)],x.hist$breaks[-1],x.hist$counts)
[,1] [,2] [,3]
[1,] 10 11 118
[2,] 11 12 101
[3,] 12 13 106
[4,] 13 14 113
[5,] 14 15 92
[6,] 15 16 102
[7,] 16 17 89
[8,] 17 18 104
[9,] 18 19 85
[10,] 19 20 90
-
- Активный участник
- Сообщения: 117
- Зарегистрирован: 31 окт 2011, 00:18
- Репутация: 14
- Откуда: Кривий Ріг
Re: Составление таблицы частот
Нашёл ещё один вариант решения - использование связки функций table и as.data.frame:
В результате получаем таблицу данных (data frame) со столбцами, в которых указаны значения и соответствующие им частоты.
Код: Выделить всё
>chastost<- as.data.frame(table(kompozit_2M$FE_TOTAL))
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: Составление таблицы частот
Так ведь если группировать не нужно, то
>chastost<- aggregate(x=kompozit_2M$FE_TOTAL,by=list(kompozit_2M$FE_TOTAL),FUN=length)
>chastost<- aggregate(x=kompozit_2M$FE_TOTAL,by=list(kompozit_2M$FE_TOTAL),FUN=length)
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: Составление таблицы частот
Если нужна табличка с частотами, то, пользуясь примером gamm
> x<-runif(1000,10,20)
> x.hist<-hist(x,breaks=seq(10,20,by=1),plot=FALSE)
> br<-x.hist$breaks
> cts<-x.hist$counts
> n<-length(br)
> x.group<-data.frame(iv=paste(br[1:n-1],'-',br[2:n]),N=cts)
> x<-runif(1000,10,20)
> x.hist<-hist(x,breaks=seq(10,20,by=1),plot=FALSE)
> br<-x.hist$breaks
> cts<-x.hist$counts
> n<-length(br)
> x.group<-data.frame(iv=paste(br[1:n-1],'-',br[2:n]),N=cts)
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Составление таблицы частот
не, не соответствует первоначальной задаче. Считает не попадание в интервалы с произвольными вещественными границами, а уникальные значения. Годится только для категориальных переменных.ymr3R9Jge писал(а):Нашёл ещё один вариант решения - использование связки функций table и as.data.frame:В результате получаем таблицу данных (data frame) со столбцами, в которых указаны значения и соответствующие им частоты.Код: Выделить всё
>chastost<- as.data.frame(table(kompozit_2M$FE_TOTAL))
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 29 гостей