Verwenden von switch() in R zu ersetzen Vektor-Werte
Diese sollte ziemlich einfach, aber auch nach der überprüfung aller Unterlagen und on-line-Beispiele, die ich verstehe es nicht.
Ich möchte die switch () - ersetzen Sie die Werte ein Charakter-Vektor.
Fake, extrem einfache, reproduzierbare Beispiel:
test<-c("He is", "She has", "He has", "She is")
Let ' s sagen, ich will weisen Sie "1" in Sätzen einschließlich der verb "to be" und "2" Sätze einschließlich das verb "haben". Der folgende Code funktioniert NICHT:
test<-switch(test,
"He is"=1,
"She is"=1,
"He has"=2,
"She has"=2)
Fehlermeldung:
+ + + + Error in switch(test, `He is` = 1, `She is` = 1, `He has` = 2, `She has` = 2) :
EXPR must be a length 1 vector
Ich denke, EXPR ist in der Tat ein Vektor der Länge 1, also, was ist falsch?
Dachte ich, vielleicht R erwarteten Zeichen als Ersatz, aber weder die Verpackung wechseln() in einem "als".integer" noch die folgenden arbeiten:
test<-switch(test,
"He is"="1",
"She is"="1",
"He has"="2",
"She has"="2")
Vielleicht ist es noch nicht zu Vektorisieren, und sollte ich eine Schleife? Ist es das? Wäre enttäuschend, in Anbetracht der Stärke von R ist die Vektorisierung. Vielen Dank im Voraus!
- Vektor "test" ist von der Länge 4 sein. So kann das nicht funktionieren. Finden Sie mit
test <- "He is"
. - Sind Sie versuchen, dies zu erreichen
code <- c("He is"=1, "She is"=1, "He has"=2, "She has"=2); code[test]
? - Wow @Experimentator, ist die elegante... ich wusste nicht, dass, wenn ich wählen Sie Objekte von einem numerischen Vektor mit einem Namen Attribut-Verwendung eines Zeichens, R möchten, verwenden Sie die names-Attribut entsprechen die zahlen der numerische Vektor-zu meinem Charakter-Vektor. Dies ist meine Lieblings-Lösung, aber ich kann nicht wählen Sie es als die Antwort, weil die Frage war, wie zu verwenden, wechseln Sie() richtig. Thumbs up tho
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die vektorisierte form
if
istifelse
:oder
switch
ist im Grunde eine Art des Schreibens verschachtelteif
-else
tests. Sie sollten denkenif
undswitch
als Ablaufsteuerung Aussagen, nicht als Daten-transformation-Operatoren. Sie verwenden Sie zum Steuern der Ausführung eines Algorithmus, z.B. zum test für die Konvergenz oder zu wählen, welcher Ausführungspfad zu nehmen. Sie würde Sie nicht benutzen, um direkt zu manipulieren die Daten in den meisten Fällen.Hier ist der richtige Weg, um Vektorisieren eine Funktion, z.B. Schalter:
Ich hoffe, das hilft.
Sie konnten es versuchen
Beziehungsweise
Fand ich diesen Ansatz die meisten lesbar:
Wenn
test
numerisch ist, muss konvertieren Wertcharacter
um diese zu verwenden.Während ich in der Regel lieber base R Ansätze, es ist ein Paket mit einem Vektorgrafik-switch-Funktion.
Hinzugefügt, basierend auf den Kommentar zu verwenden, OP-Daten.
"Vektorisieren" basiert auf der "mapply" - Funktion, während "ifelse" ist eine Basis-Funktion, die sollte schon vektorisiert. So in Bezug auf Leistung "Vektorisieren" kann langsamer erfolgen.
Es ist einfach zu Vektorisieren Sie eine R-Funktion mit der "apply" - Familie, aber die Leistung ist in der Regel ein Problem für große Mengen. Besser mit Basis-Funktionen optimiert, um die Arbeit mit Vektoren.
Hier ist eine Lösung mit
recode()
auscar
: