Как создать частотную таблицу в R с суммарной частотой и относительной частотой
Я новичок в R. Мне нужно создать простую таблицу частот (как в книгах) с кумулятивной частотой и относительной частотой.
Итак, я хочу генерировать некоторые простые данные, например
> x
[1] 17 17 17 17 17 17 17 17 16 16 16 16 16 18 18 18 10 12 17 17 17 17 17 17 17 17 16 16 16 16 16 18 18 18 10
[36] 12 15 19 20 22 20 19 19 19
таблица типа:
frequency cumulative relative
(9.99,11.7] 2 2 0.04545455
(11.7,13.4] 2 4 0.04545455
(13.4,15.1] 1 5 0.02272727
(15.1,16.9] 10 15 0.22727273
(16.9,18.6] 22 37 0.50000000
(18.6,20.3] 6 43 0.13636364
(20.3,22] 1 44 0.02272727
Я знаю, что это должно быть просто, но я не знаю, как это сделать.
Я получил некоторые результаты, используя этот код:
factorx <- factor(cut(x, breaks=nclass.Sturges(x)))
as.matrix(table(factorx))
Ответы
Ответ 1
Ты близок! Есть несколько функций, которые сделают это легким для вас, а именно cumsum()
и prop.table()
. Вот как я, вероятно, собираю это вместе. Я делаю некоторые случайные данные, но точка одна и та же:
#Fake data
x <- sample(10:20, 44, TRUE)
#Your code
factorx <- factor(cut(x, breaks=nclass.Sturges(x)))
#Tabulate and turn into data.frame
xout <- as.data.frame(table(factorx))
#Add cumFreq and proportions
xout <- transform(xout, cumFreq = cumsum(Freq), relative = prop.table(Freq))
#-----
factorx Freq cumFreq relative
1 (9.99,11.4] 11 11 0.25000000
2 (11.4,12.9] 3 14 0.06818182
3 (12.9,14.3] 11 25 0.25000000
4 (14.3,15.7] 2 27 0.04545455
5 (15.7,17.1] 6 33 0.13636364
6 (17.1,18.6] 3 36 0.06818182
7 (18.6,20] 8 44 0.18181818
Ответ 2
Базовые функции table
, cumsum
и prop.table
должны найти вас там:
cbind( Freq=table(x), Cumul=cumsum(table(x)), relative=prop.table(table(x)))
Freq Cumul relative
10 2 2 0.04545455
12 2 4 0.04545455
15 1 5 0.02272727
16 10 15 0.22727273
17 16 31 0.36363636
18 6 37 0.13636364
19 4 41 0.09090909
20 2 43 0.04545455
22 1 44 0.02272727
С помощью cbind и именования столбцов, которые вам нравятся, в будущем это будет довольно легко. Выход из функции таблицы является матрицей, поэтому этот результат также является матрицей. Если бы это было сделано над чем-то большим, было бы более эффективно сделать это:
tbl <- table(x)
cbind( Freq=tbl, Cumul=cumsum(tbl), relative=prop.table(tbl))
Ответ 3
Если вы ищете что-то предварительно упакованное, рассмотрите функцию freq()
из пакета descr
.
library(descr)
x = c(sample(10:20, 44, TRUE))
freq(x, plot = FALSE)
Или, чтобы получить кумулятивные проценты, используйте функцию ordered()
freq(ordered(x), plot = FALSE)
Чтобы добавить столбец "совокупные частоты":
tab = as.data.frame(freq(ordered(x), plot = FALSE))
CumFreq = cumsum(tab[-dim(tab)[1],]$Frequency)
tab$CumFreq = c(CumFreq, NA)
tab
Если у ваших данных отсутствуют значения, в таблицу добавляется допустимый процентный столбец.
x = c(sample(10:20, 44, TRUE), NA, NA)
freq(ordered(x), plot = FALSE)
Ответ 4
Еще одна возможность:
library(SciencesPo)
x = c(sample(10:20, 50, TRUE))
freq(x)
Ответ 5
Мое предложение - проверить пакет agricolae... проверить:
library(agricolae)
weight<-c( 68, 53, 69.5, 55, 71, 63, 76.5, 65.5, 69, 75, 76, 57, 70.5,
+ 71.5, 56, 81.5, 69, 59, 67.5, 61, 68, 59.5, 56.5, 73,
+ 61, 72.5, 71.5, 59.5, 74.5, 63)
h1<- graph.freq(weight,col="yellow",frequency=1,las=2,xlab="h1")
print(summary(h1),row.names=FALSE)