Si vous voulez diviser en 3 groupes également répartis, la réponse est la même que la réponse de Ben Bolker ci-dessus - utilisez ggplot2::cut_number()
. Pour des raisons de complétude, voici les 3 méthodes pour transformer des données continues en catégorielles (binning).
cut_number()
: Crée n groupes avec un nombre d'observations (approximativement) égal
cut_interval()
: Crée n groupes avec une plage égale
cut_width()
: Crée des groupes de largeur
Mon choix est cut_number()
car il utilise des quantiles régulièrement espacés pour le binning des observations. Voici un exemple avec des données biaisées.
library(tidyverse)
skewed_tbl <- tibble(
counts = c(1:100, 1:50, 1:20, rep(1:10, 3),
rep(1:5, 5), rep(1:2, 10), rep(1, 20))
) %>%
mutate(
counts_cut_number = cut_number(counts, n = 4),
counts_cut_interval = cut_interval(counts, n = 4),
counts_cut_width = cut_width(counts, width = 25)
)
# Data
skewed_tbl
#> # A tibble: 265 x 4
#> counts counts_cut_number counts_cut_interval counts_cut_width
#>
#> 1 1 [1,3] [1,25.8] [-12.5,12.5]
#> 2 2 [1,3] [1,25.8] [-12.5,12.5]
#> 3 3 [1,3] [1,25.8] [-12.5,12.5]
#> 4 4 (3,13] [1,25.8] [-12.5,12.5]
#> 5 5 (3,13] [1,25.8] [-12.5,12.5]
#> 6 6 (3,13] [1,25.8] [-12.5,12.5]
#> 7 7 (3,13] [1,25.8] [-12.5,12.5]
#> 8 8 (3,13] [1,25.8] [-12.5,12.5]
#> 9 9 (3,13] [1,25.8] [-12.5,12.5]
#> 10 10 (3,13] [1,25.8] [-12.5,12.5]
#> # ... with 255 more rows
summary(skewed_tbl$counts)
#> Min. 1st Qu. Médiane Moyenne 3e Qu. Max.
#> 1.00 3.00 13.00 25.75 42.00 100.00
# Histogramme montrant le biais
skewed_tbl %>%
ggplot(aes(counts)) +
geom_histogram(bins = 30)
# cut_number() distribue uniformément les observations en bacs par quantile
skewed_tbl %>%
ggplot(aes(counts_cut_number)) +
geom_bar()
# cut_interval() divise uniformément l'intervalle à travers la plage
skewed_tbl %>%
ggplot(aes(counts_cut_interval)) +
geom_bar()
# cut_width() utilise la largeur = 25 pour créer des bacs de 25 de largeur
skewed_tbl %>%
ggplot(aes(counts_cut_width)) +
geom_bar()
Créé le 2018-11-01 par le paquet reprex (v0.2.1)
1 votes
Êtes-vous sûr que la réponse de @Ben Bolker n'est pas la bonne ? Vous spécifiez que vous voulez des groupes de tailles égales.