Frage

Ich bin eine Monte-Carlo-Simulation ausgeführt und der Ausgang ist in der Form:

> d = data.frame(iter=seq(1, 2), k1 = c(0.2, 0.6), k2=c(0.3, 0.4))
> d
iter  k1   k2
1     0.2  0.3
2     0.6  0.4

Die Plots ich generieren will, sind:

plot(d$iter, d$k1)
plot(density(d$k1))

Ich weiß, wie gleichwertige Grundstücke zu tun mit ggplot2, Konvertit Datenrahmen

new_d = data.frame(iter=rep(d$iter, 2), 
                   k = c(d$k1, d$k2), 
                   label = rep(c('k1', 'k2'), each=2))

dann ist Plotten einfach. Jedoch kann die Anzahl der Iterationen sehr groß und die Anzahl der ks auch groß sein kann. Diese Mittel etwa mit einem sehr großen Datenrahmen durcheinander.

Gibt es trotzdem, ich vermeiden, kann diesen neuen Datenrahmen zu schaffen?

Danke

War es hilfreich?

Lösung

Kurze Antwort ist „Nein“ Sie können nicht vermeiden, einen Datenrahmen zu schaffen. ggplot erfordert, dass die Daten in einem Datenrahmen sein. Wenn Sie qplot verwenden, können Sie geben es Vektoren für x und y trennen, aber intern, es ist immer noch einen Datenrahmen aus den Parametern Erstellen Sie in übergeben.

Ich bin damit einverstanden Vorschlag mit Jubas - lernt die reshape Funktion zu nutzen, oder besser noch das reshape Paket mit melt / cast Funktionen. Sobald Sie schnell mit Ihren Daten im langen Format setzen, die Schaffung erstaunliches ggplot Graphen werden, einen Schritt näher!

Andere Tipps

Ja, es ist möglich, dass Sie einen Datenrahmen zu vermeiden erstellen: nur eine leere Argumentliste an die Basisschicht, ggplot() geben. Hier ist ein komplettes Beispiel basierend auf Ihrem Code ein:

Bibliothek (ggplot2)

d = data.frame(iter=seq(1, 2), k1 = c(0.2, 0.6), k2=c(0.3, 0.4))
# desired plots:
# plot(d$iter, d$k1)
# plot(density(d$k1))

ggplot() + geom_point(aes(x = d$iter, y = d$k1))
# there is not enough data for a good density plot,
# but this is how you would do it:
ggplot() + geom_density(aes(d$k1))

Beachten Sie, dass, obwohl dies ermöglicht Sie nicht um einen Datenrahmen zu schaffen, könnte ein Datenrahmen noch intern erstellt werden. Siehe beispielsweise der folgende Auszug aus ?geom_point:

  

Es werden alle Objekte befestigte einen Datenrahmen zu erzeugen.

Sie können die reshape Funktion verwenden, um Datenrahmen zu „lang“ Format zu umwandeln. sein kann es ein bisschen schneller als Ihr Code?

R> reshape(d, direction="long",varying=list(c("k1","k2")),v.names="k",times=c("k1","k2"))
     iter time   k id
1.k1    1   k1 0.2  1
2.k1    2   k1 0.6  2
1.k2    1   k2 0.3  1
2.k2    2   k2 0.4  2

So zu den vorherigen Antworten nur hinzuzufügen. Mit qplot könnten Sie tun,

p <- qplot(y=d$k2, x=d$k1)

und dann von dort baut sie weiter, zum Beispiel mit

p + theme_bw()

Aber ich stimme -. Schmelze / cast ist genereally der Weg nach vorn

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top