2017-04-09 3 views
-2

Ich habe einen sehr großen Datensatz mit 200 Variablen (Spalten), ich bin auf der Suche nach einem Weg (Loop-Funktion, lapply, etc) mehrere Variablen in der gleichen Handlung haben. Wie kann ich den folgenden Code ändern, um diese Art von Handlung zu haben (anstatt jede geom_line(aes(y=)) zur Wiederholung jeder W?Ändern Sie den Code (fassen Sie den Code zusammen)

A<-seq(0, 9, 1) 
B<-seq(30, 39, 1) 
W1<-seq(0.3, 1.2, 0.1) 
r<-seq(32, 41, 1) 
f<-seq(33, 42, 1) 
W2<-seq(1.3, 2.2, 0.1) 
g<-seq(34, 43, 1) 
W3<-seq(4.3, 5.2, 0.1) 
s<-data.frame(A, B, W1, r, f, W2, g, W3) 
ggplot(s, aes(x = A, y = B)) + geom_point() + geom_line(aes(y = W1)) + 
    geom_line(aes(y = W2)) + 
    geom_line(aes(y = W3)) + theme_bw() 
+1

Sicherlich gibt es gearbeitet Beispiele für die Verwendung 'for'-Schleifen zu' print' mehrere ggplot-Objekten. Welche Art von Suche hast du gemacht? Ich habe "921 Ergebnisse" gefunden, als ich diese Suche gemacht habe. Vielleicht sollten Sie Ihre Antwort löschen und dann nur wiederherstellen, wenn Sie die Antwort nicht mit einer Suche finden können. –

+0

@ 42, Danke für den Kommentar. Ich konnte die Antwort auf meine Frage nicht finden. – SUSAN

+1

Ich würde vorschlagen, den Titel Ihrer Frage anzupassen. Derzeit ist es nicht sehr spezifisch. – Michael

Antwort

1

Ich würde vorschlagen, dass Sie ein wenig Zeit investieren, sich häufig mit dem Satz von Paketen vertraut zu machen, bekannt als tidyverse. eine sehr empfehlenswerte und verständliche Einführung ist das kostenlose Online-Buch "R for datascience".

Insbesondere Ihre Frage zu beantworten, möchte ich zunächst wirft den Datenrahmen in ‚lange‘ Form, und dann jede Variable plotte gegen A eine ästhetische Mapping basierend auf Farbe:

library("tidyverse") 
A<-seq(0,9,1) 
B<-seq(30,39,1) 
m1<-seq(0.3,1.2,0.1) 
r<-seq(32,41,1) 
f<-seq(33,42,1) 
m2<-seq(1.3,2.2,0.1) 
g<-seq(34,43,1) 
m3<-seq(4.3,5.2,0.1) 
s<-data.frame(A,B,m1,r,f,m2,g,m3) 

data <- s %>% gather(var, value, B:m3) 
ggplot(data, aes(x=A, y=value, color =var)) + geom_point() 

(Ich reparierte Fehler im Code Beispiel)

Daraus ergibt sich die folgende Handlung:

enter image description here

+0

danke für Ihre Hilfe. Auf jeden Fall werde ich mir dieses Paket ansehen, aber ich kann es nicht für meine Frage verwenden. In Wirklichkeit habe ich einen großen Datensatz und manchmal gibt es viele Spalten zwischen m1, m2, m3. Also kann ich nicht etwas wie B: m3 benutzen. – SUSAN

+0

Verstehe ich Sie richtig, dass Sie nur m1, m2, m3 plotten wollen? in diesem Fall: 'Daten <- s %>% sammeln (var, Wert, m1, m2, m3) ggplot (Daten, aes (x = A, y = Wert, Farbe = var)) + geom_point()' – Michael

+0

In meinen echten Daten set, ich habe m1 bis m20 (Variablen mit einem Muster in ihren Namen). Also suche ich nach Funktion/Loop-Funktion, um den Code zusammenzufassen, anstatt m1, m2, m3, m4, m5 ,,,,,,, m20 zu schreiben. Und wie ich erwähnt habe, sind diese Variablen nicht aufeinander folgend. – SUSAN

1

ggplot funktioniert am besten mit Daten im Langformat. Zum Umformen von breit nach lang wird hier melt() aus dem data.table Paket verwendet.

library(ggplot2) 
ggplot(molten, aes(A, value, group = variable, colour = variable)) + 
    geom_point() + geom_line() + theme_bw() 

enter image description here

oder selektiv:

ggplot(molten[variable %in% letters], aes(A, value, group = variable, colour = variable)) + 
    geom_point() + geom_line() + theme_bw() 

enter image description here

library(data.table) 
molten <- setDT(melt(s, id.vars = "A")) 
head(molten, 12) 
# A variable value 
# 1: 0  B 30.0 
# 2: 1  B 31.0 
# 3: 2  B 32.0 
# 4: 3  B 33.0 
# 5: 4  B 34.0 
# 6: 5  B 35.0 
# 7: 6  B 36.0 
# 8: 7  B 37.0 
# 9: 8  B 38.0 
#10: 9  B 39.0 
#11: 0  W1 0.3 
#12: 1  W1 0.4 

Jetzt können Variablen auf einmal aufgetragen werden oder wahlweise als Punkte oder Linien:

ggplot(mapping = aes(A, value, group = variable, colour = variable)) + 
    geom_point(data = molten[variable %in% c("B")]) + 
    geom_line(data = molten[variable %like% "^W"]) + theme_bw() 

enter image description here

Verwandte Themen