Comment générer un tableau de fréquences dans R avec la fréquence cumulée et la fréquence relative

je suis nouveau avec R. je dois générer un tableau de fréquence simple (comme dans les livres) avec la fréquence cumulative et la fréquence relative.

donc je veux générer à partir de quelques données simples comme

> 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

une table comme:

            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

je sais que ça devrait être simple, mais je ne sais pas comment.

j'ai obtenu des résultats à l'aide de ce code:

factorx <- factor(cut(x, breaks=nclass.Sturges(x)))
as.matrix(table(factorx))
26
demandé sur smci 2012-06-22 04:49:30

5 réponses

vous êtes proche! Il y a quelques fonctions qui vous faciliteront la tâche, à savoir cumsum() et prop.table(). Voici comment je devrais sans doute mettre cela ensemble. Je fais quelques données aléatoires, mais le point est le même:

#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
25
répondu Chase 2012-06-22 01:07:06

les fonctions de base table, cumsum et prop.table devrait vous permettre d'y parvenir:

 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

avec cbind et la désignation des colonnes à votre goût cela devrait être assez facile pour vous à l'avenir. Le résultat de la fonction table est une matrice, donc ce résultat est aussi une matrice. Si cela était fait sur quelque chose de grand, il serait plus efficace de faire ceci:

tbl <- table(x)
cbind( Freq=tbl, Cumul=cumsum(tbl), relative=prop.table(tbl))
20
répondu 42- 2013-07-10 22:52:43

si vous cherchez quelque chose de préemballé, considérez le freq() de la fonction descr paquet.

library(descr)
x = c(sample(10:20, 44, TRUE))
freq(x, plot = FALSE)

Ou pour obtenir des pourcentages cumulatifs, utilisez le ordered() function

freq(ordered(x), plot = FALSE)

Pour ajouter un "montant cumulatif des fréquences" colonne:

tab = as.data.frame(freq(ordered(x), plot = FALSE))
CumFreq = cumsum(tab[-dim(tab)[1],]$Frequency)
tab$CumFreq = c(CumFreq, NA)
tab

si vos données ont des valeurs manquantes, une colonne valide de pourcentage est ajoutée au tableau.

x = c(sample(10:20, 44, TRUE), NA, NA)
freq(ordered(x), plot = FALSE)
12
répondu Sandy Muspratt 2012-06-22 02:20:28

Encore une autre possibilité:

 library(SciencesPo)
    x = c(sample(10:20, 50, TRUE))
    freq(x)
1
répondu daniel 2015-07-15 02:38:47

ma suggestion est de vérifier le agricolae paquet... check it out:

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)
-1
répondu Afranio Vieira 2015-11-17 13:42:57