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))
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
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))
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)
Encore une autre possibilité:
library(SciencesPo)
x = c(sample(10:20, 50, TRUE))
freq(x)