2016-12-09 1 views
2

Ich habe einen Datenrahmen, den ich verwende "Fisch" genannt.Wie ändere ich Werte, die mit einem bestimmten Buchstaben zu NA beginnen (in R)

Der Datenrahmen hat 3 verschiedene Variablen. Eine der Variablen heißt "Spezies".

Es gibt einige Arten, die mit dem Buchstaben M beginnen. Ich möchte stattdessen alle Werte von Arten ändern, die mit dem Buchstaben M beginnen, der fehlt (NA).

Ich weiß, wie man es in NA umwandelt, wenn man den ganzen Artennamen macht, aber wie macht man das nur für Spezies, die mit dem Buchstaben M anfangen?

Ich habe dies versucht:

fish$species[fish$species=="^M_"] <- NA 

Aber das funktioniert nicht. Kann jemand helfen?

+0

Um zu testen, ob ein Muster gefunden wurde, benötigen Sie die Funktion 'grepl', nicht' == '. – Frank

+0

Danke, ich habe Sachen mit gsub und grep gesehen. Aber kannst du mir mit dem Code helfen? Ersetzen Sie das == durch "grep1"? – newtoallthis

+0

Ah, ich habe vergessen, dass R die Funktion 'startsWith' hinzugefügt hat (in der Antwort unten), aber die Verwendung von grepl ist in den Dokumenten zu'? Grepl' enthalten. Du machst so etwas wie 'x [grepl (patt, x)] <- y '. 'Grep' kann auch hier verwendet werden, dank der vielfältigen Möglichkeiten von R, einen Vektor zu indizieren (nach logischer oder nach Positionsnummer, die in jedem R-Intro-Tutorial behandelt wird). – Frank

Antwort

5

Sie könnten die Ersatzfunktion is.na<-() zusammen mit startsWith() verwenden.

is.na(fish$species) <- startsWith(fish$species, "M") 

Nach der R Dokumentation help(startsWith),

startsWith() entspricht aber viel schneller als grepl("^<prefix>", x), wo prefix Sonderzeichen für reguläre Ausdrücke nicht enthalten ist.

Der obige Code geht von einer Zeichenspalte aus. Für eine Faktorspalte können Sie die entsprechenden Ebenen ändern.

is.na(levels(fish$species)) <- startsWith(levels(fish$species), "M") 

Ein anderer Weg, mit levels<-() zu ersetzen wäre, NA für den Ersatz auf der rechten Handseite verwendet wird.

levels(fish$species)[startsWith(levels(fish$species), "M")] <- NA 

Beachten Sie, dass Sie auf jeden Fall grepl() verwenden können, wenn Sie möchten, aber diese Frage scheint wie ein gutes Beispiel für die Verwendung der neuen startsWith() Funktion.

Beachten Sie auch, dass alle diese erfolgreich auf dem iris Datensatz getestet wurden.

+0

Es hat funktioniert, es hat funktioniert !!!!!!! Um dies zu tun, musste ich die Variable von einem Faktor in ein Zeichen ändern. Es ist keine große Sache, aber gibt es eine Möglichkeit, es als einen Faktor zu halten? Es gibt mir einen Fehler (Nicht-Zeichen-Objekt), wenn ich als Faktor verlasse. – newtoallthis

+1

Sollte mit 'is.na (fish $ species) <- startsWith (as.character (fish $ species)," M ")' 'möglich sein. Das ändert den Vektor nicht in Zeichen. –

+0

@newtoallthis - Ich habe das gerade auch bemerkt. Einen Schnitt gemacht. –

Verwandte Themen