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