2016-09-20 3 views
-3

Ich lerne die Verwendung der ifelse Funktion von Zuur et al (2009) Ein Anfänger Leitfaden für R. In einer Übung gibt es einen Datenrahmen namens Owls, die Daten über etwa enthält 27 Nester und zwei Nacht der Beobachtungen.Wie verwende ich ifelse und einfügen Funktionen

structure(list(Nest = structure(c(1L, 1L, 1L, 1L), .Label = "AutavauxTV", class = "factor"), 
    FoodTreatment = structure(c(1L, 2L, 1L, 1L), .Label = c("Deprived", 
    "Satiated"), class = "factor"), SexParent = structure(c(1L, 
    1L, 1L, 1L), .Label = "Male", class = "factor"), ArrivalTime = c(22.25, 
    22.38, 22.53, 22.56), SiblingNegotiation = c(4L, 0L, 2L, 
    2L), BroodSize = c(5L, 5L, 5L, 5L), NegPerChick = c(0.8, 
    0, 0.4, 0.4)), .Names = c("Nest", "FoodTreatment", "SexParent", 
"ArrivalTime", "SiblingNegotiation", "BroodSize", "NegPerChick" 
), row.names = c(NA, 4L), class = "data.frame") 

die zwei Nächte unterschied sich in Bezug auf die Fütterungsregime (gesättigt oder entzogen) und sind in der Foodregime Variable angegeben. Die Aufgabe besteht darin, iffelse und nach Funktionen zu verwenden, die eine neue kategoriale Variable erstellen, die Beobachtungen aus einer einzigen Nacht in einem bestimmten Nest definiert.

In den Lösungen der folgende Code wird vorgeschlagen:

Owls <- read.table(file = "Owls.txt", header = TRUE, dec = ".") 
ifelse(Owls$FoodTreatment == "Satiated", Owls$NestNight <- paste(Owls$Nest, "1",sep = "_"), Owls$NestNight <- paste(Owls$Nest, "2",sep = "_")) 

und apperently erzeugt er eine neue Variable mit Werten, die Endungen davon variieren ("-1" oder "-2")

Like this

Wenn ich jedoch den ursprünglichen Datenrahmen aufruft, verschwinden alle "-1" -Enden in der NestNight-Varibale und werden zu "-2".

LIKE THIS

Warum Thsi passieren? Haben die Autoren etwas aus dem Code verpasst oder ich bin es, der es nicht versteht?

Vielen Dank

EDIT: Sorry, wollte ich meine Daten ein reproduzierbares Beispiel geben, indem das Kopieren mit dput aber es hat nicht funktioniert. Wenn Sie mir sagen können, wie ich es korrigieren kann, damit es richtig erscheint, wäre ich auch dankbar!

+0

R. S. Vielen Dank für die Korrektur meines Codes. Kannst du mir bitte sagen, wie du sie in einen Tisch gesteckt hast? – babesz

+0

Im Bearbeitungsfeld befindet sich eine Symbolleiste. Andernfalls müssen wir die Formatierungsoptionen auf der Hilfeseite nachschlagen. –

+0

BTW, ich möchte etwas über 'ifelse' teilen. Es gibt ein Objekt mit derselben 'Form' wie die bedingte Anweisung zurück.So wird 'ifelse (length (myvector)> 3, myvector [3: length (myvector)], myvector [1: 3])' nicht einen Vektor zurückgeben, sondern nur das erste Element dieses Vektors als 'length()' wird nur ein Element ergeben –

Antwort

1

Lösung

Wenn Sie die Zuordnung außerhalb der ifelse Struktur zu tun, es funktioniert:

Owls$NestNight <- ifelse(Owls$FoodTreatment == "Satiated", 
         paste(Owls$Nest, "1",sep = ""), 
         paste(Owls$Nest, "2",sep = "")) 

Erklärung

Was in Ihrem Fall passiert, ist einfach, wenn Sie die ausführen würde folgenden zwei Zeilen:

Owls$NestNight <- paste(Owls$Nest, "1",sep = "") 
Owls$NestNight <- paste(Owls$Nest, "2",sep = "") 

Zuerst weisen Sie paste(Owls$Nest, "1",sep = "") dem Owls$NestNight zu und dann weisen Sie ihm paste(Owls$Nest, "2",sep = "") zu. Die ifelse ist davon nicht betroffen, aber Sie weisen ihr Ergebnis keiner Variablen zu. Vielleicht ist es klar, wenn Sie diesen einfachen Code testen:

c(a <- 1:5, a <- 6:10) #c is your ifelse, a is your Owls$NestNight 
a #[1] 6 7 8 9 10 
+0

Ich sehe, vielen Dank für die Klarstellung, und auch für das Vorschlagen einer Lösung. Ich war wirklich verstört, aber es macht jetzt Sinn! – babesz

Verwandte Themen