Wie ersetze ich Werte innerhalb eines Datenrahmens durch eine Zeichenkette in R?

8

short version: Wie ersetze ich Werte innerhalb eines Datenrahmens durch einen String innerhalb eines anderen Datenrahmens?

längere Version: Ich bin ein Biologe, der mit vielen Bienenarten arbeitet. Ich habe einen Datensatz mit vielen Tausenden Bienen. Jede Reihe hat eine eindeutige Bienen-ID # mit allen relevanten Informationen über diese Probe (Daten der Erfassung, GPS-Ort, etc.). Die Arteninformationen für jede Biene wurden nicht eingegeben, da es lange dauert, sie zu identifizieren. Wenn ich IDing mache, lande ich in Kisten mit hundert Bienen, alle derselben Spezies. Ich gebe diese in einen separaten Datenrahmen ein. Ich versuche, Code zu schreiben, der die ursprüngliche Datendatei mit Speziesinformationen (Familie, Klasse, Spezies, Geschlecht, usw.) aktualisiert, während ich die Bienen identifiziere. Momentan ist die Artinformation in der ursprünglichen Datendatei leer und wird als NA innerhalb von R interpretiert. Ich möchte, dass R alle eindeutigen Bienen-IDs findet und die Art-Info ausfüllt, aber ich habe Probleme herauszufinden, wie Ersetzen Sie die NA-Werte durch eine Zeichenfolge (z. B. "Andrenidae")

Hier ist ein einfaches Beispiel für das, was ich versuche zu tun:

%Vor%

Ich ersetze also Dinge, wie ich will, aber mit einer Nummer anstelle des Familiennamens (eine Zeichenfolge). Was ich schließlich tun möchte, ist, eine kleine Schleife zu schreiben, um alle Arteninformationen hinzuzufügen, z. B .:

%Vor%

Vielen Dank im Voraus für jede Beratung!

Prost,

Zak

BEARBEITEN:

Ich habe gerade bemerkt, dass die ersten zwei Methoden jedes Mal eine neue Spalte hinzufügen, was zu Problemen führen würde, wenn ich Arteninformationen mehrmals hinzufügen müsste (was ich normalerweise tue). Zum Beispiel:

%Vor%

Gibt es eine Möglichkeit, die Spalten zu reduzieren, so dass ich einen einheitlichen Datenrahmen habe? Oder eine Möglichkeit, die RawData zu aktualisieren, anstatt jedes Mal eine neue Spalte hinzuzufügen? Danke im Voraus!

    
Arturito 11.09.2012, 13:01
quelle

4 Antworten

4

Hier ist eine Funktion, von der ich denke, dass sie für Sie funktioniert. Dies verwendet match zum Suchen und Indexieren von Werten in Ihrem Anmerkungsdatenrahmen und ersetzt dann die Werte in den rawData.

%Vor%     
Matt Shirley 11.09.2012 17:40
quelle
3

Eine weitere Option ist die Verwendung von ?join im Paket plyr

%Vor%

Aktualisieren

%Vor%     
Maiasaura 11.09.2012 13:18
quelle
2

Sie könnten die Funktion merge verwenden, z. :

%Vor%

NB.

Es ist nicht notwendig, rawData mit der Spalte family zu initialisieren.
Die Zusammenführungsfunktion fügt sie automatisch hinzu, z. :

%Vor%     
digEmAll 11.09.2012 13:14
quelle
2

Eine data.table Lösung, die speicher- und zeiteffizient ist.

  • Beachten Sie, dass Sie stringsAsFactors = F für rbindlist (eine super-schnelle Version von do.call (rbind, list) / rbind)
  • benötigen
  • Ich habe eine weitere Spalte als Dummy-Daten zum Objekt rawData hinzugefügt und die Familie entfernt.

Erstellen Sie die Daten -

%Vor%

oder

%Vor%

Für welche Daten Sie sich auch interessieren

    
mnel 12.09.2012 03:37
quelle

Tags und Links