web-dev-qa-db-fra.com

Comment générer un tableau de fréquence en R avec une fréquence cumulée et une fréquence relative

Je suis nouveau avec R. Je dois générer un tableau de fréquence simple (comme dans les livres) avec une fréquence cumulée et une fréquence relative.

Donc, je veux générer des 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 cela devrait être simple, mais je ne sais pas comment.

J'ai eu quelques résultats en utilisant ce code:

factorx <- factor(cut(x, breaks=nclass.Sturges(x)))
as.matrix(table(factorx))
26
eloyesp

Tu es proche! Quelques fonctions vous faciliteront la tâche, à savoir cumsum() et prop.table(). Voici comment je mettrais probablement cela ensemble. Je fais des 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
Chase

Les fonctions de base table, cumsum et prop.table devraient vous y amener:

 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. La sortie de la fonction table est une matrice, ce résultat est donc également une matrice. Si cela se faisait 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))
21
42-

Si vous recherchez quelque chose de pré-emballé, considérez la fonction freq() du paquet descr.

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

Ou pour obtenir des pourcentages cumulés, utilisez la fonction ordered()

freq(ordered(x), plot = FALSE)

Pour ajouter une colonne "fréquences cumulées":

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 comportent des valeurs manquantes, une colonne de pourcentage valide est ajoutée à la table.

x = c(sample(10:20, 44, TRUE), NA, NA)
freq(ordered(x), plot = FALSE)
12
Sandy Muspratt

Encore une autre possibilité:

 library(SciencesPo)
    x = c(sample(10:20, 50, TRUE))
    freq(x)
1
daniel