2013-07-19 12 views
8

Ich habe eine Matrix von 2 Spalten. Ich möchte jede dieser Spalten boxplot aber jede hat unterschiedliche Anzahl von Einträgen.Boxplot von Vektoren mit unterschiedlicher Länge

Zum Beispiel hat die erste Spalte 10 Einträge und die zweite Spalte 7 Einträge. Die verbleibenden 3 der zweiten Spalte erhalten Null.

Ich möchte diese Seite aus Gründen der Vergleiche nebeneinander darstellen.

Gibt es eine Möglichkeit, R zu sagen, dass er die ganze Spalte 1 und nur die ersten 7 Einträge für Spalte 2 boxplotplottiert?

Antwort

11

Sie könnten einfach Index die Werte, die Sie wollen, zum Beispiel

## dummy version of your data 
mat <- matrix(c(1:17, rep(0, 3)), ncol = 2) 

## create object suitable for plotting with boxplot 
## I.e. convert to melted or long format 
df <- data.frame(values = mat[1:17], 
       vars = rep(c("Col1","Col2"), times = c(10,7))) 

## draw the boxplot 
boxplot(values ~ vars, data = df) 

In der obigen ich Sie beim Wort nehme, dass Sie eine Matrix haben. Wenn Sie tatsächlich einen Datenrahmen haben, dann würden Sie

df <- data.frame(values = c(mat[,1], mat[1:7, 2]), 
       vars = rep(c("Col1","Col2"), times = c(10,7))) 

brauchen, und ich nehme an, dass die Daten in den beiden Spalten vergleichbar sind, dass die Tatsache, dass die Werte in zwei Spalten schlägt eine kategorische Variable, die uns erlaubt, zu spalten die Werte (wie die Größe von Männern und Frauen, mit Geschlecht als der kategorische Wert).

Das resultierende boxplot wird unter

enter image description here

+0

Danke das ist brilliant. Nur um sicherzustellen, dass ich es richtig verstehe, liest du alles von 'mat' in 'Werte' als Vektor. Dann erstellen Sie die 'Vars' Variable mit zwei Spalten und 'Zeiten' sagen 'Vars', dass die erste 10 zu Spalte 1 gehört und die nächste 7 zu Spalte 2 gehört? Habe ich es richtig gesagt? – user1007742

+0

Nicht ganz; Ich lese nur die ersten 17 Werte von "mat", aber Sie haben Ruhe. –

+0

Wie kann ich dies zu 3 Vektoren anstelle von 2 tun? – user1007742

2

für eine beliebige Anzahl von Spalten und einer beliebigen Anzahl von leeren Einträge angezeigt Sie so tun können.

## Load data from CSV; first row contains column headers 
dat <- read.csv('your-filename.csv', header = T) 

## Set plot region (when set 'ylim' skip first row with headers) 
plot(
    1, 1, 
    xlim=c(1,ncol(dat)), ylim=range(dat[-1,], na.rm=T), 
    xaxt='n', xlab='', ylab='' 
) 
axis(1, labels=colnames(dat), at=1:ncol(dat)) 

for(i in 1:ncol(dat)) { 
    ## Get i-th column 
    p <- dat[,i] 

    ## Remove 0 values from column 
    p <- p[! p %in% 0] 
    ## Instead of 0 you can use any values 
    ## For example, you can remove 1, 2, 3 
    ## p <- p[! p %in% c(1,2,3)] 

    ## Draw boxplot 
    boxplot(p, add=T, at=i) 
} 

Dieser Code lädt CSV-Dateien Tabellenform, entfernen 0 Werte aus der Spalte (oder Sie können alle anderen Werte entfernen), und alle boxplot in einer Grafik für jede Spalte ziehen.

Denke das hilft.