2016-06-15 15 views
1

Die nachstehenden Angaben:subsetting Entfernung zu viele Zeilen

# Import mock data 
Biomass <- c(20, 10, 5, 4, 5, 7, 8, 22, 13, 13, 15, 18, 2, 5, 7, 10) 
Season <- c("Winter", "Spring", "Summer", "Fall") 
Year <- c("1", "2", "3", "4") 
ReefSpecies <- c("Admiral Ma", "Jaap Mf", "Grecian Ma", "Alligator Mr", "Jaap Mf", "Grecian Ma", "Alligator Mr", "Admiral Ma", "Grecian Ma", "Alligator Mr", "Admiral Ma", "Jaap Mf", "Alligator Mr", "Admiral Ma", "Jaap Mf","Grecian Ma") 
Seasonal <- data.frame(Biomass, Season, Year, ReefSpecies) 
Seasonal$Times <- paste(Seasonal$Year, Seasonal$Season, sep=" ") 
Seasonal$Time <- factor(Seasonal$Times, levels=unique(Seasonal$Times)) 


# Plot figure 
ggplot(data = Seasonal, aes(Time, Biomass, color=ReefSpecies)) + 
geom_point() + 
geom_smooth(aes(group=ReefSpecies), method="lm") + 
theme(axis.text.x = element_text(angle = 270)) + 
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     panel.background = element_rect(colour="black", size=1, fill=NA), axis.line = element_line(colour = "black")) + 
theme(legend.position = "top") + 
xlab("Year") + 
ylab(bquote("Ash-free Biomass (mg/cm"^"2"*")")) 

würde Ich mag ein 3 Figuren machen, die jede Spezies einzeln hinzufügen. Zum Beispiel haben wir drei Arten über vier Riffe (Admiral Ma und Grecian Ma - 1 Spezies und 2 Riffe, Jaap Mf - 1 Spezies und 1 Riff, und Alligator Mr - 1 Spezies und 1 Riff). Was ich möchte, ist die Reef Ma zum ersten Mal hinzufügen - das wäre die erste Zahl.

Als nächstes möchte ich eine andere Art hinzufügen (sagen wir) Reef Mf, die die vorherige Abbildung enthält - das wäre die zweite Handlung.

Da die letzte Handlung alle Daten enthält, weiß ich, wie man das macht - und brauche nur Hilfe mit den ersten beiden Zahlen.

Anbei unten ist ein Bild von dem, was ich erreichen konnte - Sie werden sehen, dass mit dieser Methode nicht alle Datenpunkte enthalten sind (vergleichen Sie mit anderen Bild aller Daten in einer Figur) - Code ist für beide Abbildungen beigefügt auch.

HINWEIS: Die oben genannten Daten ist eine kleine Teilmenge von dem, was unter

Subsetted - not all data included aufgetragen ist

#Subsetted dataset with missing points 
ggplot(subset(Seasonal, ReefSpecies == c("Grecian O. faveolata", "Jaap O. faveolata", "Alligator O. faveolata", "Admiral O. faveolata")), 
    aes(Time, Biomass, color = ReefSpecies)) + 
    geom_point() + 
    geom_smooth(aes(group=ReefSpecies), method="lm") + 
    theme(axis.text.x = element_text(angle = 270)) + 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
    panel.background = element_rect(colour="black", size=1, fill=NA), axis.line = element_line(colour = "black")) + 
    theme(legend.position = "top") + 
    xlab("Year") + 
    ylab(bquote("Ash-free Biomass (mg/cm"^"2"*")")) 

Dies ist ein Beispiel dafür, was ich für die erste Figur will - es all das beinhaltet gleiche Spezies, aber auch von allen meinen Studienorten.

Zusätzlich erhalte ich diese Warnmeldung - ich denke es bedeutet, dass es versucht, eine gleiche Anzahl von Punkten für die Teilmenge zu plotten, aber R Warnungen können fast eine Fremdsprache für mich sein.

Warning message: 
In ReefSpecies == c("Grecian O. faveolata", "Jaap O. faveolata", : 
    longer object length is not a multiple of shorter object length 

Subsetted data with 2 species

ggplot(subset(Seasonal, ReefSpecies == c("Grecian O. faveolata", "Jaap O. faveolata", "Alligator O. faveolata", "Admiral O. faveolata", "Grecian O. annularis", "Jaap O. annularis", "Alligator O. annularis", "Admiral O. annularis")), 
    aes(Time, Biomass, color = ReefSpecies)) + 
    geom_point() + 
    geom_smooth(aes(group=ReefSpecies), method="lm") + 
    theme(axis.text.x = element_text(angle = 270)) + 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
    panel.background = element_rect(colour="black", size=1, fill=NA), axis.line = element_line(colour = "black")) + 
    theme(legend.position = "top") + 
    xlab("Year") + 
    ylab(bquote("Ash-free Biomass (mg/cm"^"2"*")")) 

Dies ist ein Beispiel dafür, was ich für die erste Figur will - es ist alles von der gleichen Art enthält aber von allen meiner Studie sowie Standorten.

Die gleiche Warnmeldung kommt mit diesem Plot oben als auch

Whole data set

HINWEIS: Die rote Linie in der Teilmenge Figur entspricht die Goldlinie in der gesamten Daten Figur

Der blaue Linie in der Teilmenge entspricht der blauen Linie in der gesamten Datenfigur

Die grüne Linie in der Teilmenge entspricht der grünen Linie in der gesamten Daten Figur

Die violette Linie in der Teilmenge Figur in der gesamten Daten Figur auf die violette Linie entspricht

# Whole Dataset 
ggplot(data = Seasonal, aes(Time, Biomass, color=ReefSpecies)) + 
geom_point() + 
geom_smooth(aes(group=ReefSpecies), method="lm") + 
theme(axis.text.x = element_text(angle = 270)) + 
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     panel.background = element_rect(colour="black", size=1, fill=NA), axis.line = element_line(colour = "black")) + 
theme(legend.position = "top") + 
xlab("Year") + 
ylab(bquote("Ash-free Biomass (mg/cm"^"2"*")")) 

Wie Sie aus diesen beiden Figuren zu sehen - in dem Entfernen mehrere Punkte ggplot scheint die Figur beim Zeichnen der Teilmenge.

Jede Hilfe wäre willkommen, lassen Sie mich wissen, wenn Sie etwas mehr von mir brauchen, und vielen Dank im Voraus!

+2

Verwenden Sie '% in%' anstelle von '==' in Ihrer 'Teilmengen'-Bedingung, um zu überprüfen, ob' ReefSpecies' mit einem der angegebenen Namen übereinstimmt. –

+0

@MikkoMarttila Ich versuchte das, aber es sagt Funktion nicht gefunden und ich bekomme diesen Fehler 'Fehler in eval (Ausdruck, envir, enclos): konnte Funktion nicht finden"% n% "' – Danib90

+0

@MikkoMarttila Ignorieren Sie den letzten Kommentar - das hat funktioniert ! Vielen Dank! Ich musste versuchen,% in% 'nicht'% n% ' – Danib90

Antwort

2

Wenn Sie Vektoren mit unterschiedlicher Länge vergleichen, wird der kürzere Vektor wiederverwendet, um der Länge des längeren Vektors zu entsprechen, und dann werden elementweise Vergleiche durchgeführt. Hier ist ein kleines Beispiel:

x <- c(1, 1, 0, 0, 2) 
y <- c(1, 0) 

# compare x with a shorter vector y 
x == y 
# [1] TRUE FALSE FALSE TRUE FALSE 

# the previous is actually the same as 
x == c(y, y, y[1]) 
x == c(1, 0, 1, 0, 1) 
# [1] TRUE FALSE FALSE TRUE FALSE 

# to check for each element of x if it matches any element in y 
x %in% y 
# [1] TRUE TRUE TRUE TRUE FALSE 

Der Vektor von Namen, die Sie durch wurde recycelt auf die Länge Ihrer Daten, und dann jeder Datensatz wurde überprüft, gegen das entsprechende Element auf dem Recycling-Vektor des Namen der Teilmenge wollten. Nur die Beobachtungen, bei denen der Wert von ReefSpecies zufällig mit dem Wert in dem wiederverwerteten Vektor von Namen übereinstimmte, wurden in die unterteilten Daten aufgenommen.