2016-05-23 14 views
0

Ich habe Daten über die Ankunftszeiten von Arten zu Lebensmitteln. Ich möchte in der Lage sein, die Ebenen von breed, die vor den breed_jackals und breed_hyena Ebenen für jede Karkasse auftreten, mithilfe der got.here Wert, der ihre Ankunftszeit ist, zu bestimmen.Wie kann ich die Ebenen eines Faktors finden, der vor einer anderen angegebenen Ebene auftritt?

Ich möchte nur die Reihenfolge so im ersten Fall für carcass_336 Ich würde einen Wert für die Schakale erhalten, die die breed_eagles wäre.

Für die zweite Karkasse carcass_338 hätte ich 2 Ebenen für die Hyäne breed_lappets und breed_eagles in dieser Reihenfolge. Und 3 Stufen für den Schakal, weil die Hyäne vor ihr ankommt, d. H. breed_lappets, breed_eagles & breed_hyena.

Ich dachte, arrivals$breed[arrivals$mycarcass=="carcass_336"] würde funktionieren, aber es gibt mir alle Ebenen.

Idealerweise würde ich auch gerne herausgreifen, welches Niveau direkt vor den Schakalen und Hyänen vorkommt, indem ich jeweils das Minimum got.here verwende. Z.B. für carcass_338 wäre es die breed_eagles für breed_hyenas. Auch hier wird der got.here Wert nützlich sein, ich glaube, weil ich, dass die kürzesten Ankunftszeit für jeden Karkasse für eine anderen Zweck mit extrahieren verwendet haben:

arrivals[ arrivals$got.here == ave(arrivals$got.here, arrivals$mycarcass, FUN=min), ] 

Hier ist meine Daten:

arrivals <- read.table(header=T, text=" 
who  breed   got.here mycarcass 
167  breed_eagles 102  carcass_336 
183  breed_eagles 108  carcass_336 
181  breed_eagles 271  carcass_336 
134  breed_eagles 284  carcass_336 
191  breed_eagles 311  carcass_336 
283  breed_jackals 5419  carcass_336 
118  breed_lappets 200  carcass_338 
198  breed_eagles 219  carcass_338 
151  breed_eagles 256  carcass_338 
206  breed_hyenas 1759  carcass_338 
294  breed_jackals 7948  carcass_338 
235  breed_hyenas 10988  carcass_338 
215  breed_hyenas 13629  carcass_338 
290  breed_jackals 17013  carcass_338") 

Die Die erwartete Ausgabe, die ich möchte, wäre davon abgeleitet und würde die Häufigkeit dieser Ereignisse sein. z.B. für Schakale

+0

Können Sie bitte die erwartete Ausgabe anzeigen? – mtoto

+0

@ mtoto einige Zusammenfassung der Häufigkeit dieser Vorkommen wäre ideal, wie ich nicht in meiner Antwort angegeben habe. –

Antwort

1

Hier ist eine Möglichkeit, die Ankunft von Arten vor Schakal Ankunft zu zählen. Es gibt wahrscheinlich eine sauberere Methode. Aus Gründen der Klarheit werde ich nur die Lösung für Schakale zeigen, aber die Ergebnisse für Hyänen zu erhalten, wäre einfach.

Dies gibt eine Matrix mit den Zählungen für jede Rasse, einschließlich Hyänen und Schakale. Nun ziehen wir die Hyänen und Schakale aus der Zählung und fügen Karkasse Namen zu den Spalten:

# drop unwanted breeds 
beat_jackals <- 
      beat_jackals[row.names(beatJackals) != "breed_jackals",] 
# add carcass names to the columns 
colnames(beat_jackals) <- unique(arrivals$mycarcass) 

weil sapply verarbeitet, um die Kadaver in der gleichen Reihenfolge, unique(arrivals$mycarcass), wir haben nicht über eine Fehlausrichtung zu kümmern.

arrival_order <- sapply(unique(arrivals$mycarcass), function(i) { 
            unique(arrivals[arrivals$mycarcass==i, "breed"])}) 

Dies ermöglicht es Ihnen, die Rasse zu ziehen, die unmittelbar vor dem Schakal angekommen:

Um die Reihenfolge der Ankunft von Rasse zu jedem Karkasse zu erhalten, können Sie die folgenden Befehle verwenden

sapply(arrival_order, function(i) i[(which(i=="breed_jackals"))-1]) 
+0

fantastische Antwort. Danke vielmals. Eine Sache ist, dass die Karkassennamen nicht korrekt neu zugewiesen werden. Nicht wirklich ein Problem für mich. –

+0

@ManassaMauler Wenn diese Antwort für Sie funktioniert hat, können Sie sie auswählen, indem Sie auf das Häkchen daneben klicken.Wenn Sie eine ähnliche Frage haben, können Sie diese gerne posten und ich würde mich freuen, wenn ich eine Chance bekomme. – lmo