Je sais comment dessiner des histogrammes ou d'autres tableaux liés à la fréquence/pourcentage. Mais maintenant, je veux savoir, comment puis-je obtenir ces valeurs de fréquence dans un tableau à utiliser après coup.
J'ai un énorme ensemble de données, maintenant je dessine un histogramme avec une largeur de bin définie. Je veux extraire la valeur de fréquence (c'est-à-dire la valeur sur l'axe des y) qui correspond à chaque binwidth et l'enregistrer quelque part.
Quelqu'un pourrait m'aider avec ça? Je vous remercie!
La fonction hist
a une valeur de retour (un objet de classe histogram
):
R> res <- hist(rnorm(100))
R> res
$breaks
[1] -4 -3 -2 -1 0 1 2 3 4
$counts
[1] 1 2 17 27 34 16 2 1
$intensities
[1] 0.01 0.02 0.17 0.27 0.34 0.16 0.02 0.01
$density
[1] 0.01 0.02 0.17 0.27 0.34 0.16 0.02 0.01
$mids
[1] -3.5 -2.5 -1.5 -0.5 0.5 1.5 2.5 3.5
$xname
[1] "rnorm(100)"
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"
De ?hist
: Valeur
un objet de classe "histogramme" qui est une liste avec des composants:
breaks
et density
fournissent à peu près tout ce dont vous avez besoin:
histrv<-hist(x)
histrv$breaks
histrv$density
Juste au cas où quelqu'un toucherait cette question avec ggplot
's geom_histogram
à l'esprit, notez qu'il existe un moyen d'extraire les données d'un objet ggplot.
La fonction de commodité suivante génère une trame de données avec la limite inférieure de chaque bac (xmin
), la limite supérieure de chaque bac (xmax
), le milieu de chaque bac (x
), ainsi que la valeur de fréquence (y
).
## Convenience function
get_hist <- function(p) {
d <- ggplot_build(p)$data[[1]]
data.frame(x = d$x, xmin = d$xmin, xmax = d$xmax, y = d$y)
}
# make a dataframe for ggplot
set.seed(1)
x = runif(100, 0, 10)
y = cumsum(x)
df <- data.frame(x = sort(x), y = y)
# make geom_histogram
p <- ggplot(data = df, aes(x = x)) +
geom_histogram(aes(y = cumsum(..count..)), binwidth = 1, boundary = 0,
color = "black", fill = "white")
Illustration:
hist = get_hist(p)
head(hist$x)
## [1] 0.5 1.5 2.5 3.5 4.5 5.5
head(hist$y)
## [1] 7 13 24 38 52 57
head(hist$xmax)
## [1] 1 2 3 4 5 6
head(hist$xmin)
## [1] 0 1 2 3 4 5
Une question connexe à laquelle j'ai répondu ici ( histogramme cumulatif avec ggplot2 ).