webentwicklung-frage-antwort-db.com.de

Wie erstelle ich ein Histogramm für jede Spalte meiner Tabelle?

Ich habe eine Datentabelle mit einer Spalte, die einen Laborwert für jedes Lernfach (Zeilen) darstellt. 

Ich möchte eine Reihe von Histogrammen erstellen, die die Verteilung der Werte für jeden Labortest (d. H. Spalte) zeigen. Jeder Satz von Laborwerten hätte idealerweise eine andere Behälterbreite (einige sind ganze Zahlen mit einem Bereich von Hunderten, andere sind numerisch mit einem Bereich von 2-3).

Wie mache ich das?

6
veldhoen

Wenn Sie die Pakete tidyr und ggplot2 kombinieren, können Sie mit facet_wrap einen schnellen Satz von Histogrammen für jede Variable in Ihrem data.frame erstellen.

Sie müssen Ihre Daten mit tidyr::gather in eine lange Form bringen, sodass Sie key und value Spalten wie diese haben:

library(tidyr)
library(ggplot2)
# or `library(tidyverse)`

mtcars %>% gather() %>% head()
#>   key value
#> 1 mpg  21.0
#> 2 mpg  21.0
#> 3 mpg  22.8
#> 4 mpg  21.4
#> 5 mpg  18.7
#> 6 mpg  18.1

Unter Verwendung dieser Daten können wir value als unsere x-Variable abbilden und facet_wrap verwenden, um die Spalte key zu trennen:

ggplot(gather(mtcars), aes(value)) + 
    geom_histogram(bins = 10) + 
    facet_wrap(~key, scales = 'free_x')

Der scales = 'free_x' ist erforderlich, es sei denn, Ihre Daten haben alle eine ähnliche Skala.

Sie können bins = 10 durch alles ersetzen, das zu einer Zahl ausgewertet wird, wodurch Sie sie möglicherweise etwas kreativ einstellen können. Alternativ können Sie binwidth einstellen. Dies ist möglicherweise praktischer, je nachdem, wie Ihre Daten aussehen. Egal, Binning wird etwas Finesse erfordern.

19
alistaire

Sie können die Darstellungen in einer for-Schleife mit etwas wie dem folgenden generieren, wenn Ihr Datenrahmen "df" heißt und Sie Histogramme beginnend mit Spalte 2 erstellen möchten (wenn Spalte 1 Ihre ID ist)

for (col in 2:ncol(df)) {
    hist(df[,col])
}

Die Funktion hist berechnet automatisch eine angemessene Breite der Fächer, oder Sie können eine feste Anzahl von Fächern für alle Histogramme angeben, indem Sie das Argument break hinzufügen:

hist(df[,col], breaks=10)

Wenn Sie RStudio verwenden, werden alle Ihre Plots automatisch im Plotbereich gespeichert. Wenn nicht, müssen Sie jede Zeichnung in einer separaten Datei innerhalb der Schleife speichern, wie hier erklärt: http://www.r-bloggers.com/automatically-save-your-plots-to-a-folder/

5
Katia

Ich bin gerade auf die multi.hist () - Funktion aus dem psych package gestoßen. Sie können Histogramme schnell nach bestimmten Spalten zeichnen, und es sieht so aus, als könnten Sie für jede Spalte unterschiedliche Unterbrechungen festlegen.

0
kitkat